Hi All,
i tried a lot to manipulte the below script to include the users, which are not mapped to the any one the database role but no luck. ( this means, user existed in the database but doesnot mapped to any role)
The below script absoultly working fine, if the users are mapped to atleat one role.
Now I m looking for the script for the Database users which are not mapped to database roles, in the same output.
--=======================
WITH CTE AS (
SELECT rm.member_principal_id,
SUM(CASE WHEN r.name = 'db_datareader' THEN 1 END) AS reader,
SUM(CASE WHEN r.name = 'db_datawriter' THEN 1 END) AS writer,
SUM(CASE WHEN r.name = 'db_execute' THEN 1 END) AS execer,
SUM(CASE WHEN r.name = 'db_ddladmin' THEN 1 END) AS ddladmin,
SUM(CASE WHEN r.name = 'db_owner' THEN 1 END) AS dbowner,
SUM(CASE WHEN r.name NOT IN ('public', 'db_datareader', 'db_datawriter',
'db_execute', 'db_ddladmin',
'db_owner')
THEN 1
END) AS other
FROM sys.database_role_members rm
JOIN sys.database_principals r ON r.principal_id = rm.role_principal_id
GROUP BY rm.member_principal_id
)
SELECT dp.name, db_name(), dp.type_desc, 'x' AS "public",
CASE WHEN CTE.reader >= 1 THEN 'X' ELSE ' ' END AS "Read",
CASE WHEN CTE.writer >= 1 THEN 'X' ELSE ' ' END AS "Write",
CASE WHEN CTE.execer >= 1 THEN 'X' ELSE ' ' END AS "Execute",
CASE WHEN CTE.ddladmin >= 1 THEN 'X' ELSE ' ' END AS "DDL Admin",
CASE WHEN CTE.dbowner >= 1 THEN 'X' ELSE ' ' END AS "db_owner",
CASE WHEN CTE.other >= 1
THEN (SELECT r.name + '; '
FROM sys.database_role_members rm
JOIN sys.database_principals r ON r.principal_id = rm.role_principal_id
WHERE rm.member_principal_id = CTE.member_principal_id
AND r.name NOT IN ('public', 'db_datareader', 'db_datawriter',
'db_execute', 'db_ddladmin',
'db_owner')
FOR XML PATH(''))
ELSE ''
END AS "Other"
FROM CTE
JOIN sys.database_principals dp ON CTE.member_principal_id = dp.principal_id
ORDER BY dp.name
-- =======================
Thanks,
Satish Kumar.
Thanks, Satish Kumar. Please mark as this post as answered if my anser helps you to resolves your issue :)