Entendendo os comandos GRANT, REVOKE e DENY

Grant, revoke e deny são comandos transact-sql usados para atribuir e negar permissões para acessos a objetos e recursos. Não é raro ocorrer confusão entre os comandos DENY e REVOKE, portanto vou falar sobre cada um dos comandos e mostrar as diferenças dos mesmos.

GRANT = utilizado para atribuir permissão ao user, para realizar uma operação;
DENY = nega permissão a um usuário ou grupo para realizar operação em um objeto ou recurso;
REVOKE = remove a permissão GRANT ou DENY.

Vamos imaginar uma situação: Você necessita atribuir uma permissão para realizar select em uma tabela, para os membros do grupo RH, que é um grupo Windows, porém você não quer que a Maria, membro desse grupo, tenha permissão para acessar essa tabela. Você irá usar o comando GRANT para o grupo RH e usar o comando DENY para a Maria. Isso fará com que Maria não tenha nenhum tipo de acesso à tabela em questão, sem prejudicar os outros membros do grupo RH.

Vamos à prática:

-- Criando login para o grupo adventureworks\RH

CREATE LOGIN [ADVENTUREWORKS\RH] FROM WINDOWS WITH DEFAULT_DATABASE=[MASTER]

-- Criando user RH para o grupo adventureworks\RH

CREATE USER [RH] FOR LOGIN [ADVENTUREWORKS\RH]

-- atribuindo permissão de SELECT na tabela Person.Address do banco Adventureworks200R2 para o user RH

USE [ADVENTUREWORKS2008R2]
GO
GRANT SELECT ON [Person].[Address] TO [RH]

/* Logue com a conta de Maria e execute o select na tabela.
O comando será executado com sucesso. Após, vamos remover as permissões de Maria.
*/

REVOKE SELECT ON [PERSON.ADDRESS]
TO [ADVENTUREWORKS2008R2\MARIA]

/* Após o comando, execute novamente o SELECT na tabela. Perceba que Maria 
continua com permissão na tabela, devido à permissão GRANT concedida ao grupo RH,
e Maria é membro do Grupo. Para remover a permissão de Maria, sem afetar o grupo,
execute o comando DENY:
*/

DENY SELECT ON [PERSON.ADDRESS]
TO [ADVENTUREWORKS2008R2\MARIA]

Voilá, como em um passe de mágica, maria não consegue mais realizar SELECT na tabela pois o comando DENY negou explicitamente a permissão para ela, sem afetar a permissão para os demais membros do grupo RH.

Espero que o artigo seja útil.

Abraços e até a próxima.

Anúncios

2 comentários sobre “Entendendo os comandos GRANT, REVOKE e DENY

  1. Pingback: Segurança no SQL Server | Alex Souza

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s