我的用户属于哪些 AD 组登录?

Mar*_*lli 13 sql-server permissions sql-server-2008-r2 active-directory sql-server-2014

我不确定我是否为这个问题选择了正确的标题。我真正想要的是,给定一个单独的 Windows AD 用户,我想找出可以访问此服务器中特定数据库的 Windows AD 组(登录名)的列表

当我运行以下查询时

select
    name,
    principal_id,
    type,
    type_desc,
    default_schema_name,
    create_date,
    modify_date,
    owning_principal_id,
    sid,
    is_fixed_role
from sys.database_principals
Run Code Online (Sandbox Code Playgroud)

在我的服务器中

Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 2011 年 6 月 17 日 00:54:03 版权所有 (c) Windows NT 6.1(内部版本 7601:Service Pack 1)上的 Microsoft Corporation 标准版(64 位)

我得到以下结果(部分列表):

在此处输入图片说明

我需要知道特定登录名的所有权限。此登录名可以通过 AD 组访问我的服务器/数据库。

1) 从上面的列表中,我的登录名属于哪些 AD 组?

在此处输入图片说明

我一直在下面这样做,但我真的很想找出该用户所属的 AD 组(根据上图可以访问该服务器)的列表。

首先,我以相关用户身份执行

    EXECUTE AS LOGIN='mycompany\HThorne'

    DECLARE @User VARCHAR(20)
    SELECT @USER = SUBSTRING(SUSER_SNAME(), 
CHARINDEX('\', SUSER_SNAME()) + 1, LEN(SUSER_SNAME()))
Run Code Online (Sandbox Code Playgroud)

我确保我拥有正确的凭据

    SELECT   @USER 
            , SUSER_SNAME()
            ,SYSTEM_USER
            , USER_NAME()
            , CURRENT_USER
            , ORIGINAL_LOGIN()
            , USER
            ,SESSION_USER
Run Code Online (Sandbox Code Playgroud)

我转到特定数据库并使用 fn_my_permissions - 以相关用户身份运行

    use WebDataImportStage
    go
    SELECT * FROM fn_my_permissions (NULL, 'DATABASE');
    GO

    REVERT
Run Code Online (Sandbox Code Playgroud)

这给了我下面的结果:

在此处输入图片说明

小智 18

我的登录名属于上面列表中的哪些 AD 组?

您需要做的就是执行以下命令:

EXEC xp_logininfo 'domain\useraccount','all';
GO
Run Code Online (Sandbox Code Playgroud)

如果该帐户无法通过该服务器上的任何组进行访问,并且是域中的合法帐户,则不会返回任何记录。如果发现用户具有权限,您可以通过检查permission path. 这将返回domain\groupname授予域用户访问权限的组。


Ken*_*her 5

要回答您的具体问题,我发现获取用户所属的 AD 组列表(来自 SQL Server)的最简单方法是使用sys.login_tokensys.user_token

您必须EXECUTE AS LOGIN =像上面一样使用,但是一旦您模拟登录名,您就可以查询sys.login_token以获取登录名所属的组列表。这包括任何服务器级角色和所有 AD 组。有一个principal_id 列链接到sys.server_principals系统视图。它将为所有服务器角色以及在 中具有条目的 AD 组填写sys.server_principals

要获取更多特定于数据库的信息,您可以转到您感兴趣的数据库并使用它sys.user_token来获取与该数据库关联的角色/AD 组的列表。在这种情况下, principal_id 与 相关联sys.database_principals