use*_*956 3 sql t-sql sql-server
我知道这个问题之前已经以多种形式被问过,但不幸的是,它们都没有帮助我满足这个非常基本的需求 - 我正在寻找一个脚本,它将特定登录名和数据库作为参数并返回适当的关联角色。
例如 - 对于所附的屏幕截图,当向脚本传递ADMA1用户名和fogbugzRelease数据库时,输出应为db_owner。
您可以使用以下查询来获取分配给用户的数据库角色
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)