SQL Server - 如何获取用户登录映射?

use*_*956 3 sql t-sql sql-server

我知道这个问题之前已经以多种形式被问过,但不幸的是,它们都没有帮助我满足这个非常基本的需求 - 我正在寻找一个脚本,它将特定登录名和数据库作为参数并返回适当的关联角色。

例如 - 对于所附的屏幕截图,当向脚本传递ADMA1用户名和fogbugzRelease数据库时,输出应为db_owner

在此输入图像描述

ASP*_*ASP 5

您可以使用以下查询来获取分配给用户的数据库角色

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