Então este me deixou perplexo. Estamos fazendo uma limpeza de permissões e temos alguns grupos do AD que gostaríamos de remover de uma função de banco de dados.
Corremos ALTER ROLE MyRole DROP MEMBER [domain\group]
e pegamos Commands completed successfully.
.
MAS
o grupo ainda é um membro da função.
Alguma ideia? O login que executa os comandos é um sysadmin na instância. Também tentamos o antigo exec sp_droprolemember
com o mesmo resultado.
Isso ocorre porque você
domain\user
é um membro do grupo do Windows e esse grupo do Windows é o membro da função da qual você deseja remover o usuário.Te mostro um exemplo:
Minha conta de domínio
BL-DB-COLL2\dev4
é membro do grupo WindowsBL-DB-COLL2\TestGroup
eBL-DB-COLL2\TestGroup
é membro dadb_datareader
função de servidor fixa. Posso ver isso consultandosys.database_role_members
ou você pode vê-lo no Pesquisador de Objetos em Funções se clicar na função de seu interesse. Você verá o grupo do Windows como membro, não como uma única conta do Windows.No meu exemplo, o grupo do Windows
BL-DB-COLL2\TestGroup
é membro dedb_datareader
:Agora se eu executar
ALTER ROLE db_datareader DROP MEMBER [BL-DB-COLL2\dev4]
também tenhoCommands completed successfully.
mas meu usuário ainda está láPara remover seu usuário da função de banco de dados, você remove todo o grupo do Windows da função ou remove a conta de domínio desse grupo do Windows, não acho que seja uma boa ideia fazer o primeiro e no meu caso simples acabei de executar
deny select to [BL-DB-COLL2\dev4]
e este usuário não pode mais fazer nadaSELECT
, mesmo que ainda seja membro do db_datareader.A maneira correta de fazer isso é a forma "administrativa": você deve pedir ao responsável de RH para mover essa pessoa para outra equipe que tenha outras tarefas a realizar e pertença a outro grupo do Windows. Uma vez que o usuário é removido deste grupo do Windows no nível do Windows e colocado em outro grupo do Windows com permissões limitadas que este grupo deveria ter você fez seu trabalho, caso contrário você nega manualmente todas as permissões que a função tem para este
domain\user
. Observe que neste caso será difícil para outra pessoa adivinhar como é possível que "o membro db_datareader não possa fazer nenhum SELECT".