在工作中,我们使用 AD 组来控制对 SQL Server 数据库的访问。
Security > Logins
我可以在和中看到这些组(database) > Security > Users
。
问题是一些数据库有 50 多个这样的 AD 组作为有效的登录名/用户,我知道我是不止一个的成员。
有没有办法可以确定我在哪些 AD 组下登录?
在工作中,我们使用 AD 组来控制对 SQL Server 数据库的访问。
Security > Logins
我可以在和中看到这些组(database) > Security > Users
。
问题是一些数据库有 50 多个这样的 AD 组作为有效的登录名/用户,我知道我是不止一个的成员。
有没有办法可以确定我在哪些 AD 组下登录?
您实际上已以所有人的身份登录。您将拥有授予您所属的每个组的所有个人权限的联合。
有 2 个直接的内置命令可以帮助您找到所需的内容:
首先,扩展过程 XP_LoginInfo(至少从 SS2000 开始可用)将向您显示允许特定登录名用于连接到实例的所有连接路径
DECLARE @LoginName sysname
SELECT @LoginName = SYSTEM_USER
EXEC xp_LoginInfo @AcctName = @LoginName, @Option = 'all'
最后一列“权限路径”下显示的所有组名都是提供的 LoginName 所属的组。还要注意“特权”栏;它将显示登录名在实例上是否具有管理员或用户级别的权限。
现在,函数 fn_my_permissions(自 SS2005 起可用)将显示当前连接的登录在当前数据库或服务器上的所有权限。
SELECT * FROM fn_my_permissions(NULL, 'DATABASE');
SELECT * FROM fn_my_permissions(NULL, 'SERVER');
正如 Damien_The_Unbeliever 在 2012 年 11 月 28 日回应的那样,基本上最终的权限列表是所有分配给每个组(以及已明确添加 ID 的单独)权限路径的所有权限的联合 - 授予和拒绝 -您看到通过执行 xp_LoginInfo。
所以答案基本上是当有多个允许的路径时,您不会与任何一个组完全连接。相反,从本质上讲,你与他们所有人联系在一起。虽然 SQL Server 没有任何地方清楚地显示甚至声明权限的“联合”性质,但可以通过上述 2 个命令推断出。