我有一个场景,用户可以通过他们的Windows组登录到SQL Server。该用户本身没有登录名或数据库中的用户。
然后,我想获取用户登录的Windows组的名称。然而,suser_sname()
返回实际的用户名。suser_sid()
也无法帮助我。
有人知道怎么做吗?
我有一个场景,用户可以通过他们的Windows组登录到SQL Server。该用户本身没有登录名或数据库中的用户。
然后,我想获取用户登录的Windows组的名称。然而,suser_sname()
返回实际的用户名。suser_sid()
也无法帮助我。
有人知道怎么做吗?
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中进行查询。