我有一个场景,用户可以通过他们的 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';
这将为用户所在的任何组返回行(行在列中将具有非空值permission path
)。但它也会为他们自己的用户名返回一行(在我的情况下permission path
,该行为空)。
您还可以通过以下查询查看您可能希望看到的所有可能组:
SELECT * FROM master.sys.server_principals
WHERE type = 'G'; -- type_desc = 'WINDOWS_GROUP'
该用户还可能是尚未向 SQL Server 注册的其他 AD 组的成员。你需要为此去AD。