Introdução

sp_WhoIsAuthorized permite obter informações detalhadas sobre as permissões de um principal (usuário, login, role, etc.) no SQL Server. sp_WhoIsAuthorized provê uma série de opções para buscar as permissões associadas aos usuários de um base, considerando as permissões herdadas de grupos do Windows e roles, além de explorar e considerar as hierarquia de permissões no SQL Server.

Por exemplo, quando um usuário tem permissão de SELECT em uma tabela, mas o usuário faz parte de uma role que tem um DENY CONTROL no mesmo banco da tabela, então a permissão de SELECT não é efetivada por conta da hierarquia de permissões do SQL Server. (Um CONTROL em DATABASE afeta um SELECT em DATABASE, que afeta um SELECT no SCHEMA, que afeta um SELECT em OBJECT). sp_WhoIsAuthorized tem níveis de de detalhes que irão mostrar quando uma permissão é anulada por outra maior, ou as permissões efetivadas.

Considere que exista uma base chamada “Gurus” e um LOGIN chamado “Ken” foi criado e adicionado a esta base mapeado sob o USER “Ken”. Ao USER “Ken” foi dado as permissões de SELECT na tabela “foundations”. Foi criado uma role chamada “Negations” e para esta role foi dada a permissão de DENY CONTROL na base “Gurus”. Ken foi adicionado à “Negations”.

Você pode usar a sp_WhoIsAuthorized da seguinte forma para obter as informações de permissões para Ken:

No exemplo acima, o resultado seria semelhante à este:

Resultados

Em um outro nível de detalhes, sp_WhoIsAuthorized verifica todas as permissões que um determinado “principal” possui e exibe o que realmente está efetivado. Dependendo da quantidade de permissões, este cálculo poderá levar algum tempo, porém apresenta um visão mais apurada:

Usando o parâmetro @DetailsLevel
Usando o parâmetro @DetailsLevel

 

Você pode usar o comando “EXEC sp_WhoIsAuthorized @help = 1” para obter mais informações sobre parâmetros e operações:

help em sp_WhoIsAuthorized