De gegeven oplossing dekt niet waar de toestemming wordt verleend voor het schema of de database zelf, die ook toestemmingen verlenen aan de tabellen. Hierdoor krijg je ook die situaties. Je kunt een WHERE-clausule gebruiken tegen permission_name om te beperken tot alleen DELETE.
SELECT
class_desc
, CASE WHEN class = 0 THEN DB_NAME()
WHEN class = 1 THEN OBJECT_NAME(major_id)
WHEN class = 3 THEN SCHEMA_NAME(major_id) END [Securable]
, USER_NAME(grantee_principal_id) [User]
, permission_name
, state_desc
FROM sys.database_permissions
Ook zou db_datawriter moeten worden gecontroleerd op lidmaatschap omdat het impliciete INSERT-, UPDATE- en DELETE-rechten geeft, wat betekent dat u het niet zult zien verschijnen in de toestemmings-DMV's of hun afgeleiden.