• 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