仅授予某些数据库的 KILL 连接(会话)权限?

Ale*_*sko 3 sql-server permissions kill

For a SQL Server on a VM/physical box (not Azure SQL database!)
Run Code Online (Sandbox Code Playgroud)

这是否可以授予 KILL 权限,但以某种方式授予者只能终止某些数据库的连接?

我不想授予此用户杀死任何连接的能力,而只是 1 个数据库

谢谢!!

Sol*_*zky 5

通过模块签名授予高度选择性/细粒度的权限相当容易:

  1. USE [master]
  2. 创建一个存储过程来执行您希望低权限登录能够执行的任何操作,并进行必要的检查等。
  3. 创建证书
  4. 从该证书创建登录
  5. 授予基于证书的登录完成存储过程编码要做的事情所需的最低权限级别(在这种情况下它可能只是ALTER ANY CONNECTION(根据@sepupic)
  6. 使用该证书对该存储过程进行签名 ADD SIGNATURE
  7. 授予EXECUTE对该存储过程的低特权登录权限。

然而,弄清楚哪个会话/SPID 正在影响哪个数据库并不容易。该database_id所报告的sys.dm_exec_sessions是“当前”数据库:无论是什么连接到/它们的默认DB如果没有连接字符串/不管DB经最近一次更改为指定的USE声明。但是“当前”数据库不一定是问题所在。任何人都可以使用由 3 部分组成的名称在其他 DB 中执行代码和运行查询(一个查询可以引用 3 个表,每个表位于单独的 DB 中,并且它们都不在“当前”DB 中)。因此,我不确定您将如何可靠地强制执行“仅某些数据库”约束。