【问题标题】:Set user permissions per connection?为每个连接设置用户权限?
【发布时间】:2026-01-23 06:45:02
【问题描述】:

是否可以在 SQL-Server 中为每个连接设置用户权限?

例如:

DENY insert ON all TO user
DENY update ON all TO user
DENY delete ON all TO user

所以,假设一个用户在我的应用程序中连接为sa(* 请参阅编辑),我可以在某个时候以某种方式更改(并可能恢复)该用户的权限(例如,那时他有一个读取- 仅访问)?

编辑:抱歉举了一个错误的例子。该用户不是sa,而是其他具有完全访问权限的用户。

【问题讨论】:

  • sa 在 SQL Server 上实际上是“上帝模式”。你不能DENYsa 做任何事;即使你给他们DENY 权限sa > all other permissions。如果您想限制某人的权限,请为他们创建一个具有适当权限的登录名和用户。 不要让人们访问sa 帐户;只有在所有其他选项都用尽时,系统管理员才能使用它。
  • @Larnu,sa 是具有完全访问权限的用户的示例
  • 是的,你不能降低sa的权限,所以不要让它们像它一样连接。
  • @Larnu,我可以根据连接降低其他用户(不是sa)的权限吗? (抱歉提供错误信息 - 用户实际上不是sa
  • 没有。如果您希望连接具有不同的权限,请使用不同的登录名。权限设置在登录和用户级别,连接没有权限。如果您在连接时更改登录/用户的权限,它将立即拥有这些权限(不需要建立新连接),因此如果有多个连接,它将影响所有连接。应用程序可以访问不同登录用户以执行不同任务并没有错;事实上,我认为这很常见;这是简单的权限隔离。

标签: sql-server user-permissions


【解决方案1】:

正如我在 cmets 中提到的,权限不是在连接级别设置的,而是在登录和用户级别设置的。

如果您有一个连接,并且您更改了正在使用的登录名/用户的权限,这些权限将立即应用于该连接以及任何其他连接;因此,使用登录名和用户 AppUser 的连接不能对具有完全相同登录名和用户的另一个连接用户具有不同的权限。

如果您需要一个应用程序对不同的事物具有不同的权限,那么创建多个登录名和用户并没有错;每个人都有自己的权限。然后,您可以控制应用程序使用不同连接字符串的登录,具体取决于所需的角色。这是相当普遍的做法;例如,您的应用程序的安全模型可能有不同的数据库,因此使用不同的登录名来更改该数据库。

【讨论】:

    【解决方案2】: