Получить список всех пользователей базы данных с указанной ролью

Я хочу получить список всех пользователей базы данных с указанной ролью. Роль - это параметр для хранимой процедуры или функции.

Somethinf как оператор select с именем пользователя и его ролью.

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

MS SQL Server 2008

Ответы

Ответ 1

В 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)

Ответ 2

просто в зависимости от того, как вы хотите передать параметр... предполагая, что вы будете использовать идентификатор роли

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

Ответ 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

Заимствован из Блог SmartBihari

РЕДАКТИРОВАТЬ 1. Получить системные роли, связанные с пользователем. Sys.sysmembers - это системный вид, который имеет членуид и groupuid как единственные столбцы. вы можете использовать функцию user_name() для извлечения имени каждого столбца.

USE [YourDatabase]
SELECT user_name([memberuid]) as [Username], User_Name([groupuid]) as [Role_Name]
FROM [sys].[sysmembers]

Ответ 4

Нечто подобное может помочь вам:

        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;