Afficher tous les éléments de security pour les rôles dans la database SQL Server?

Comment pouvons-nous montrer tout le sécurisable qui est ajouté dans un rôle particulier dans le script?

SELECT OBJECT_NAME(major_id), USER_NAME(grantee_principal_id), permission_name FROM sys.database_permissions p WHERE p.class = 1 AND OBJECTPROPERTY(major_id, 'IsMSSHipped') = 0 ORDER BY OBJECT_NAME(major_id), USER_NAME(grantee_principal_id), permission_name 

En voici un autre que j'utilise pour faire des refactorings de database, des mises à jour ou des sauvegardes. Il prend également en charge les permissions au niveau des colonnes. Cette instruction génère des instructions GRANT. Mais c'est assez facile à adapter.

 SELECT 'GRANT ' + database_permissions.permission_name + ' ON ' + CASE database_permissions.class_desc WHEN 'SCHEMA' THEN schema_name(major_id) WHEN 'OBJECT_OR_COLUMN' THEN CASE WHEN minor_id = 0 THEN object_name(major_id) COLLATE Latin1_General_CI_AS_KS_WS ELSE (SELECT object_name(object_id) + ' ('+ name + ')' FROM sys.columns WHERE object_id = database_permissions.major_id AND column_id = database_permissions.minor_id) end ELSE 'other' END + ' TO ' + database_principals.name COLLATE Latin1_General_CI_AS_KS_WS FROM sys.database_permissions JOIN sys.database_principals ON database_permissions.grantee_principal_id = database_principals.principal_id LEFT JOIN sys.objects -- consider schemas ON objects.object_id = database_permissions.major_id WHERE database_permissions.major_id > 0 AND permission_name in ('SELECT','INSERT','UPDATE','DELETE')