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. myTable
no 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_ex
que gera uma reason
coluna 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 .