Conceder negar empilhamento de permissão


9

Para a função db_denycustomer, desejo que apenas o código da coluna da tabela customer seja SELECTable e nenhum dos outros. Então eu fiz isso:

DENY SELECT ON dbo.customer TO db_denycustomer
GRANT SELECT ON dbo.customer (code) TO db_denycustomer

... e funciona bem. Legal! Mas porque ?

O que li em artigos relacionados é que as permissões são empilhadas, mas DENYtêm precedência. Por outro lado, no meu caso, parece que a última permissão "query" teve precedência. Com certeza, se eu executá-los na ordem inversa, o último também DENYoculta a coluna de código.

Você poderia, por favor, elaborar isso?

Também incluí o padrão db_datawritere as db_datareaderfunções do usuário com o qual testei.

Respostas:


10

Esse é um comportamento documentado fornecido para compatibilidade com versões anteriores. Trecho da documentação:

Cuidado Um DENY no nível da tabela não tem precedência sobre um GRANT no nível da coluna. Essa inconsistência na hierarquia de permissões foi preservada para compatibilidade com versões anteriores.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.