为每个连接设置用户权限?

Set user permissions per connection?

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

例如:

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

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

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

有关于安全部分的系统存储过程,我想这是唯一的方法,因为 SQL 必须得到保护。

https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/security-stored-procedures-transact-sql?view=sql-server-2017


https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-dropsrvrolemember-transact-sql?view=sql-server-2017

EXEC sp_dropsrvrolemember 'JackO', 'sysadmin'; 

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

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

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