SQL Server - Как получить сопоставления для входа в систему? - PullRequest
0 голосов
/ 05 мая 2018

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

Например - для прикрепленного снимка экрана при прохождении скрипта имя пользователя ADMA1 и база данных fogbugzRelease выводятся db_owner.

enter image description here

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Вы можете использовать приведенный ниже запрос, чтобы получить роль базы данных, назначенную пользователю

DECLARE @command nvarchar(4000) 
DECLARE @DBRole TABLE (DBName sysname, UserName sysname, RoleName varchar(255))
SELECT @command = 'use [?]
SELECT ''?'' AS DB_Name,
case prin.name when ''dbo'' then (select SUSER_SNAME(owner_sid) from master.sys.databases where name =''?'') else prin.name end AS UserName
,isnull(USER_NAME(mem.role_principal_id),'''') AS AssociatedRole
FROM sys.database_principals prin
LEFT OUTER JOIN sys.database_role_members mem ON prin.principal_id=mem.member_principal_id'

INSERT INTO @DBRole
EXEC sp_MSforeachdb @command 

SELECT * FROM @DBRole t 
WHERE t.UserName like '%YourUserName%'
and t.DBName like '%Your DB Name%'
0 голосов
/ 05 мая 2018

Используйте приведенный ниже запрос и в разделе с комментариями укажите базу данных и имя пользователя в соответствии с вашими требованиями и раскомментируйте строки. Надеюсь, это поможет.

DECLARE @DB_USers TABLE
(DBName sysname, UserName sysname, LoginType sysname, AssociatedRole varchar(max),create_date datetime,modify_date datetime)

INSERT @DB_USers
EXEC sp_MSforeachdb
'
use [?]
SELECT ''?'' AS DB_Name,
case prin.name when ''dbo'' then prin.name + '' (''+ (select SUSER_SNAME(owner_sid) from master.sys.databases where name =''?'') + '')'' else prin.name end AS UserName,
prin.type_desc AS LoginType,
isnull(USER_NAME(mem.role_principal_id),'''') AS AssociatedRole ,create_date,modify_date
FROM sys.database_principals prin
LEFT OUTER JOIN sys.database_role_members mem ON prin.principal_id=mem.member_principal_id
WHERE prin.sid IS NOT NULL and prin.sid NOT IN (0x00) and
prin.is_fixed_role <> 1 AND prin.name NOT LIKE ''##%'''
SELECT
dbname,username ,logintype ,create_date ,modify_date ,
STUFF(
(
SELECT ',' + CONVERT(VARCHAR(500),associatedrole)
FROM @DB_USers user2
WHERE
user1.DBName=user2.DBName AND user1.UserName=user2.UserName
FOR XML PATH('')
)
,1,1,'') AS Permissions_user
FROM @DB_USers user1
--where dbname ='master' and username = 'public'
GROUP BY dbname,username ,logintype ,create_date ,modify_date
ORDER BY DBName,username
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...