在工作中,我们使用AD组来控制对SQL Server数据库的访问。
我可以在Security > Logins
和(database) > Security > Users
中看到这些群组。
问题是某些数据库有50多个这样的AD组作为有效的登录/用户,我知道我是多个成员。
有没有办法可以确定我在哪个AD群组中登录?
答案 0 :(得分:4)
您已有效登录所有这些内容。您将拥有授予您所属的每个组的所有个人权限的联合。
答案 1 :(得分:1)
有两个直接内置的命令可以帮助你找到你想要的东西:
首先,扩展过程XP_LoginInfo(至少自SS2000起可用)将显示允许特定登录连接到实例的所有连接路径
DECLARE @LoginName sysname
SELECT @LoginName = SYSTEM_USER
EXEC xp_LoginInfo @AcctName = @LoginName, @Option = 'all'
最后一列“权限路径”下显示的所有组名都是提供的LoginName所属的组。另请注意“特权”栏目;它会显示登录是否对该实例具有 admin 或用户级别权限。
现在,函数fn_my_permissions(自SS2005起可用)将显示当前连接登录在当前数据库或服务器>上的所有权限强>
SELECT * FROM fn_my_permissions(NULL, 'DATABASE');
SELECT * FROM fn_my_permissions(NULL, 'SERVER');
当Damien_The_Unbeliever在11/28/12作出回应时,基本上最终的权限列表是所有分配的权限 - 包括Grant和Deny - 到每个组的联合(以及单独显式添加ID的地方)<您通过执行xp_LoginInfo看到的em>权限路径。
所以答案基本上是当有多个允许的路径时,你没有完全连接任何一个组。相反,从本质上讲,你将它们全部连接起来。虽然SQL Server清楚地显示甚至没有说明权限的“联合”性质,但可以使用上述两个命令来推断它。
可以在MSDN here.
上找到大量有用的安全目录视图