Interesting script.
2 things first:
1. If you have databases with different collation from your master database the script errors out on the name join. Amended as following:
EXEC ( 'USE [' + @name + '];
SELECT DB = DB_NAME(), RDP.name, MDP.name, SL.sysadmin, SL.securityadmin,
SL.serveradmin, SL.processadmin, SL.setupadmin, SL.bulkadmin, SL.diskadmin, SL.dbcreator
FROM sys.database_role_members AS DRM
INNER JOIN sys.database_principals AS RDP
ON DRM.role_principal_id = RDP.principal_id
INNER JOIN sys.database_principals AS MDP
ON DRM.member_principal_id = MDP.principal_id
INNER JOIN master.dbo.syslogins AS SL
ON MDP.name = SL.name COLLATE DATABASE_DEFAULT'
2. Database names, user names ... are not good as VARCHAR(50). Sript trucates names.
Beginning amended from:
USE master
/*Filters */
DECLARE @DBName VARCHAR(50) = NULL; --exact match
DECLARE @DBPrincipal VARCHAR(100) = NULL; --wildcard search
/*Script*/
DECLARE @name VARCHAR(50)
DECLARE @T TABLE
( DB VARCHAR(50)
, RolePrincipal VARCHAR(50)
, DBPrincipal VARCHAR(50)...
amanded as:
USE master
/*Filters */
DECLARE @DBName SYSNAME = NULL; --exact match
DECLARE @DBPrincipal SYSNAME = NULL; --wildcard search
/*Script*/
DECLARE @name SYSNAME
DECLARE @T TABLE
( DB SYSNAME
, RolePrincipal SYSNAME
, DBPrincipal SYSNAME ...
Then it runs fine.
Will attempt to make an SSMS custom report.
Thanks
Alex Donskoy
Greenberg Trauriq PA
Miami, FL