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

nik*_*nik 18 t-sql

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

Somethinf喜欢带有用户名及其角色的select语句.

+============+==========
| User name  |  Role   |
+============+==========
Run Code Online (Sandbox Code Playgroud)

MS SQL Server 2008

Jim*_* V. 33

在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)
Run Code Online (Sandbox Code Playgroud)


dav*_*ave 5

仅取决于您想如何传递参数...假设您将使用角色的 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
Run Code Online (Sandbox Code Playgroud)


Nat*_*her 3

可能会使用类似这样的东西

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
Run Code Online (Sandbox Code Playgroud)

借自SmartBihari 的博客

编辑 1 获取与用户关联的系统角色。sys.sysmembers 是一个系统视图,其中仅有 memberuid 和 groupuid 列。您可以使用 user_name() 函数来检索每列的名称。

USE [YourDatabase]
SELECT user_name([memberuid]) as [Username], User_Name([groupuid]) as [Role_Name]
FROM [sys].[sysmembers]
Run Code Online (Sandbox Code Playgroud)

  • sys.sysmembers 来自 SQL-Server 2000。2005/2008 向后兼容,所以没问题(还),但如果您刚刚在 2008 年学习如何执行此操作,那么我建议改用 sys.database_role_members。 (4认同)