Получить список всех пользователей базы данных с указанной ролью
Я хочу получить список всех пользователей базы данных с указанной ролью. Роль - это параметр для хранимой процедуры или функции.
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;