2

在工作中,我们使用 AD 组来控制对 SQL Server 数据库的访问。

Security > Logins我可以在和中看到这些组(database) > Security > Users

问题是一些数据库有 50 多个这样的 AD 组作为有效的登录名/用户,我知道我是不止一个的成员。

有没有办法可以确定我在哪些 AD 组下登录?

4

2 回答 2

4

您实际上已以所有人的身份登录。您将拥有授予您所属的每个组的所有个人权限的联合。

于 2012-11-28T07:20:31.977 回答
1

有 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 个命令推断出。

可以在此处的 MSDN 上找到大量有用的安全目录视图。

于 2012-12-10T03:52:12.077 回答