9

我创建了一个名为“MYDOMAIN\Domain Users”的登录名和数据库用户。我需要找到登录域用户的角色,但所有获取当前用户的调用都返回域用户名,例如。“MYDOMAIN\username”不是数据库用户名,例如。“我的域\域用户”。

例如,此查询返回“MYDOMAIN\username”

select original_login(),suser_name(), suser_sname(), system_user, session_user,  current_user, user_name()

这个查询返回 0

select USER_ID()

我希望用户名查询 database_role_members 是否有任何函数可以返回它或我可以获取当前用户角色的任何其他方式?

4

1 回答 1

12

我知道域用户登录被映射到 AD 组?

您必须记住,用户可以位于多个 AD 组中,并且每个 AD 组都可以以某种方式映射到数据库中,这可能有点混乱。这也意味着您需要具有多种结果的东西:)

尝试这个:

select * from sys.server_principals where type_desc = 'WINDOWS_GROUP' and is_member(name) = 1

我认为它应该正确抓取与特定用户相关的所有 Windows 组登录。之后,您可以为数据库用户加入它,即:

Select u.name from YourDB.sys.syslogins l
inner join YourDB.sys.sysusers u
on l.sid = u.sid
where l.loginname = ANY (select * from sys.server_principals where type_desc = 'WINDOWS_GROUP' and is_member(name) = 1)

您必须牢记——一路走来——您可能需要处理整个集合而不是单个值。

于 2013-12-09T15:46:28.220 回答