Beschreibung der Funktion
Das folgende Skript ermittelt automatisch alle Serverrollen (sowohl die neun festen als auch benutzerdefinierte Rollen)
SELECT
@@SERVERNAME AS ServerName,
m.name AS LoginName,
STUFF((
SELECT ',' + r2.name
FROM sys.server_role_members rm2
INNER JOIN sys.server_principals r2
ON rm2.role_principal_id = r2.principal_id
WHERE rm2.member_principal_id = m.principal_id
AND r2.type = 'R'
ORDER BY r2.name
FOR XML PATH('')
), 1, 1, '') AS Roles
FROM sys.server_principals m
WHERE m.type IN ('S', 'U', 'G') -- SQL-Login, Windows-User, Windows-Gruppe
AND m.principal_id > 4 -- System-Logins ausblenden (sa, ##MS_...)
AND EXISTS (
SELECT 1 FROM sys.server_role_members rm
WHERE rm.member_principal_id = m.principal_id
)
ORDER BY m.name;
Ausgabe-Beispiel
| No | ServerName | LoginName | RoleName | IsMember |
|---|---|---|---|---|
| 1 | SRV01 | app_user | bulkadmin | X |
| 2 | SRV01 | app_user | public | X |
| 3 | SRV01 | sa | public | X |
| 4 | SRV01 | sa | sysadmin | X |
| 5 | SRV01 | DOMAIN\joe | securityadmin | X |