Tsql 获取具有指定角色的所有数据库用户的列表

Tsql 获取具有指定角色的所有数据库用户的列表,tsql,Tsql,我想获取具有指定角色的所有数据库用户的列表。角色是存储过程或函数的参数 例如带有用户名及其角色的select语句 +============+========== | User name | Role | +============+========== MS SQL Server 2008可能会使用类似的内容 SELECT SU.Name AS UserName, SR.Name AS RoleName FROM sysUsers AS SU INNER

我想获取具有指定角色的所有数据库用户的列表。角色是存储过程或函数的参数

例如带有用户名及其角色的select语句

+============+==========
| User name  |  Role   |
+============+==========

MS SQL Server 2008可能会使用类似的内容

SELECT
    SU.Name AS UserName, SR.Name AS RoleName
FROM
    sysUsers AS SU
      INNER JOIN 
     sysUsers AS SR ON SU.GID = SR.UID
WHERE
    SU.GID <> SU.UID
ORDER BY
  RoleName, UserName

这取决于您希望如何传递参数……假设您将使用角色的id

declare @roleID int

select
    role_principal_id as roleID, 
    user_name(role_principal_id) as roleName, 
    member_principal_id as memberID,
    user_name(member_principal_id) as memberName 
from 
    sys.database_role_members
where 
    role_principal_id = @roleID

在SQL 2005和2008中,此信息最容易在两个目录视图中访问

此查询应提供您正在查找的信息

select rp.name as database_role, mp.name as database_user
from sys.database_role_members drm
join sys.database_principals rp on (drm.role_principal_id = rp.principal_id)
join sys.database_principals mp on (drm.member_principal_id = mp.principal_id)

类似的内容可以帮助您:

        select sys.server_role_members.role_principal_id ,role.name  as rolename    
        , sys.server_role_members.member_principal_id , member.name as membername 
        from sys.server_role_members 
        join sys.server_principals as role
        on sys.server_role_members.role_principal_id = role.principal_id
        join sys.server_principals as member 
        on sys.server_role_members. member_principal_id = member_principal_id;

不会返回users.sys.sysmembers的角色名,它来自SQL Server 2000。2005/2008是向后兼容的,所以(目前)没有问题,但如果你只是在2008年学习如何做到这一点,然后我建议改为使用sys.database\u role\u members。您是说系统角色还是应用程序角色?我说的是数据库角色和数据库用户。要列出登录和身份验证类型,请选择rp.name作为DatabaseRole,mp.name作为Member,mp.[type\u desc]作为LoginType,mp.authentication\u type\u desc AS AuthType FROM sys.database\u members drm JOIN sys.database\u principals rp ON drm.role\u principal\u id=rp.principal\u id JOIN sys.database\u principals mp ON drm.member\u principal\u id=mp.principal\u id
        select sys.server_role_members.role_principal_id ,role.name  as rolename    
        , sys.server_role_members.member_principal_id , member.name as membername 
        from sys.server_role_members 
        join sys.server_principals as role
        on sys.server_role_members.role_principal_id = role.principal_id
        join sys.server_principals as member 
        on sys.server_role_members. member_principal_id = member_principal_id;