Eu sei que posso consultar permissões efetivas usando sys.fn_my_permissions:
USE myDatabase;
SELECT * FROM fn_my_permissions('dbo.myTable', 'OBJECT')
entity_name | subentity_name | permission_name
------------------------------------------------
dbo.myTable | | SELECT
dbo.myTable | | UPDATE
...
Isso indica se o usuário atual tem permissões SELECT, INSERT, UPDATE etc. myTableno banco de dados myDatabase.
É possível descobrir facilmente por que o usuário tem essas permissões? Por exemplo, eu adoraria ter uma função fn_my_permissions_exque gera uma reasoncoluna adicional :
USE myDatabase;
SELECT * FROM fn_my_permissions_ex('dbo.myTable', 'OBJECT')
entity_name | subentity_name | permission_name | reason
------------------------------------------------------------------------------------------------------------------------------------
dbo.myTable | | SELECT | granted to database role public
dbo.myTable | | UPDATE | member of group MYDOMAIN\Superusers, which belongs to database role db_datawriter
...
Infelizmente, não foi possível encontrar essa função na documentação do SQL Server. Existe uma ferramenta ou script que fornece essa funcionalidade?
fn_my_permission_ex, então não há nada que eu possa exportar. Estou perguntando se existe uma função ou ferramenta com essa funcionalidade .