如何在不存在用户登录时获取Windows组名称

use*_*248 3 sql-server

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

然后,我想获取用户登录的Windows组的名称.但是,suser_sname()返回实际的用户名.suser_sid()对我也没有帮助.

有谁知道如何做到这一点?

Aar*_*and 5

DECLARE @user SYSNAME;
SET @user = SUSER_SNAME();
EXEC xp_logininfo @user, 'all';
Run Code Online (Sandbox Code Playgroud)

这将返回用户所在的任何组的行(列中的行将具有非空值permission path).但它也会为自己的用户名返回一行(在我的情况下permission path,该行为null).

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

SELECT * FROM master.sys.server_principals
  WHERE type = 'G'; -- type_desc = 'WINDOWS_GROUP'
Run Code Online (Sandbox Code Playgroud)

用户还可以是尚未向SQL Server注册的其他AD组的成员.你需要出去参加AD.