Podane rozwiązanie nie obejmuje sytuacji, w których uprawnienie jest udzielane w odniesieniu do schematu lub samej bazy danych, które przyznają uprawnienia również w odniesieniu do tabel. To da ci również takie sytuacje. Możesz użyć klauzuli WHERE przeciwko permission_name, aby ograniczyć się tylko do 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
Ponadto db_datawriter musiałby zostać sprawdzony pod kątem członkostwa, ponieważ daje niejawne prawa INSERT, UPDATE i DELETE, co oznacza, że nie zobaczysz go w DMV z uprawnieniami lub ich pochodnych.