如何解决MSSQL:列出几个数据库中每个用户的数据库成员角色
我有几个数据库,所有数据库都在database / security / users文件夹下(在图片的左侧显示):
我需要一个查询,该查询可以列出每个用户的角色成员身份(如上图右侧所示,当前用户,称为User2,没有任何用户)。 这些是我要为每个用户列出的角色。
这是我之前使用过的类似内容,用于不同的目的(在/ Security / Logins文件夹下列出登录的服务器角色,而不是在DatabaseName / Security / Users文件夹下列出用户的成员身份):
SELECT
spU.name,MAX(CASE WHEN srm.role_principal_id = 3 THEN 1 END) AS sysadmin,MAX(CASE WHEN srm.role_principal_id = 4 THEN 1 END) AS securityadmin,MAX(CASE WHEN srm.role_principal_id = 5 THEN 1 END) AS serveradmin,MAX(CASE WHEN srm.role_principal_id = 6 THEN 1 END) AS setupadmin,MAX(CASE WHEN srm.role_principal_id = 7 THEN 1 END) AS processadmin,MAX(CASE WHEN srm.role_principal_id = 8 THEN 1 END) AS diskadmin,MAX(CASE WHEN srm.role_principal_id = 9 THEN 1 END) AS dbcreator,MAX(CASE WHEN srm.role_principal_id = 10 THEN 1 END) AS bulkadmin
FROM
sys.server_principals AS spR
JOIN
sys.server_role_members AS srm
ON
spR.principal_id = srm.role_principal_id
JOIN
sys.server_principals AS spU
ON
srm.member_principal_id = spU.principal_id
WHERE
spR.[type] = 'R'
and spU.name not like '##MS%'
and spU.name not like 'NT%'
GROUP BY
spU.name
这些不是我想要的角色,此处只是为了使您更容易理解我希望输出的格式是什么。 无论如何,该查询的输出看起来像这样:
对于我当前的任务(在数据库/安全性/用户/文件夹下列出每个用户的成员角色)的类似输出将是不错的选择,但是欢迎使用其他任何方法来列出成员角色。
对于当前数据库中每个用户的成员角色列表查询,我想使其在多个数据库上工作,这将在sp_MSforeachdb的帮助下完成。当我设法解决该帖子时,我将对其进行编辑。
解决方法
如果有人需要的话,此ID是最终有效的代码:
EXEC sp_MSforeachdb '
IF ''?'' NOT IN (''master'',''msdb'',''tempdb'',''model'')
BEGIN
USE [?]
SELECT
spU.name,MAX(CASE WHEN srm.role_principal_id = 16384 THEN 1 END) AS db_owner,MAX(CASE WHEN srm.role_principal_id = 16385 THEN 1 END) AS db_accessadmin,MAX(CASE WHEN srm.role_principal_id = 16386 THEN 1 END) AS db_securityadmin,MAX(CASE WHEN srm.role_principal_id = 16387 THEN 1 END) AS db_dlladmin,MAX(CASE WHEN srm.role_principal_id = 16389 THEN 1 END) AS db_backupoperator,MAX(CASE WHEN srm.role_principal_id = 16390 THEN 1 END) AS db_datareader,MAX(CASE WHEN srm.role_principal_id = 16391 THEN 1 END) AS db_datawriter,MAX(CASE WHEN srm.role_principal_id = 16392 THEN 1 END) AS db_denydatareader,MAX(CASE WHEN srm.role_principal_id = 16393 THEN 1 END) AS db_denydatawriter
FROM
[?].sys.database_principals AS spR
JOIN
[?].sys.database_role_members AS srm
ON
spR.principal_id = srm.role_principal_id
JOIN
[?].sys.database_principals AS spU
ON
srm.member_principal_id = spU.principal_id
GROUP BY
spU.name
END'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。