代码之家  ›  专栏  ›  技术社区  ›  Adam Butler

如何查找没有自己登录名的sqlserver域用户的登录名、数据库用户名或角色?

  •  9
  • Adam Butler  · 技术社区  · 15 年前

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

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

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

    此查询返回0

    select USER_ID()
    

    我想让用户名查询数据库角色成员是否有任何函数将返回它或任何其他方式我可以得到当前用户角色?

    1 回复  |  直到 12 年前
        1
  •  11
  •   nimdil    12 年前

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

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

    试试这个:

    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)
    

    你必须记住-所有的方法-你可能需要处理整个集合,而不是单一的值。