如何在没有用户登录时获取Windows组名称

3

我有一个场景,用户可以通过他们的Windows组登录到SQL Server。该用户本身没有登录名或数据库中的用户。

然后,我想获取用户登录的Windows组的名称。然而,suser_sname()返回实际的用户名。suser_sid()也无法帮助我。

有人知道怎么做吗?


4
如果一个Windows用户属于两个不同的Windows组,你认为SQL Server会选择哪一个组? - Aaron Bertrand
感谢您的评论,我应该更清楚地表达。我不希望SQL Server选择一个 - 如果有多个组,则希望获取所有组。 长话短说...如果用户通过Windows组而不是用户登录,我想知道哪些组。 - user884248
1个回答

5
DECLARE @user SYSNAME;
SET @user = SUSER_SNAME();
EXEC xp_logininfo @user, 'all';

这将返回用户所在的任何组的行(这些行将在权限路径列中具有非空值)。但它也会返回其自己的用户名的行(在我的情况下,该行的权限路径为空)。

您还可以使用以下查询查看所有可能要看到的组:

SELECT * FROM master.sys.server_principals
  WHERE type = 'G'; -- type_desc = 'WINDOWS_GROUP'

用户可能还是其他未在SQL Server中注册的AD组的成员。您需要到AD中进行查询。


谢谢Aaron - 这正是我在寻找的。 - user884248

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接