A Linguagem de Controle de Dados é um subconjunto da Linguagem de Consulta Estruturada . Os administradores de banco de dados usam DCL para configurar o acesso de segurança aos bancos de dados relacionais.
Ele complementa a linguagem de definição de dados, que adiciona e exclui objetos de banco de dados, e a linguagem de manipulação de dados, que recupera, insere e modifica o conteúdo de um banco de dados.
DCL é o mais simples dos subconjuntos SQL, pois consiste em apenas três comandos: GRANT, REVOKE e DENY. Combinados, esses três comandos fornecem aos administradores a flexibilidade de definir e remover permissões de banco de dados de maneira granular.
DCL: Adicionando permissões com o comando GRANT
O comando GRANT adiciona novas permissões a um usuário do banco de dados Possui uma sintaxe muito simples, definida da seguinte forma:
GRANT [privilege] ON [object] TO [user] [WITH GRANT OPTION]
Aqui está o resumo de cada um dos parâmetros que você pode fornecer com este comando:
- Privilégio – pode ser a palavra-chave ALL (para conceder uma ampla variedade de permissões) ou uma permissão de banco de dados específico ou conjunto de permissões. Os exemplos incluem CREATE DATABASE, SELECT, INSERT, UPDATE, DELETE, EXECUTE e CREATE VIEW.
- Objeto – pode ser qualquer objeto de banco de dados. As opções de privilégio válidas variam com base no tipo de objeto de banco de dados que você inclui nesta cláusula. Normalmente, o objeto será um banco de dados, função, procedimento armazenado , tabela ou visualização.
- Usuário – pode ser qualquer usuário do banco de dados. Você também pode substituir uma função para o usuário nesta cláusula se desejar fazer uso da segurança de banco de dados baseada em função.
- Se você incluir a cláusula opcional WITH GRANT OPTION no final do comando GRANT, não apenas concederá ao usuário especificado as permissões definidas na instrução SQL, mas também dará ao usuário permissão para conceder essas mesmas permissões a outros usuários do banco de dados. Por esse motivo, use esta cláusula com cuidado.
Por exemplo, suponha que você deseja conceder ao usuário Joe a capacidade de recuperar informações da tabela de funcionários em um banco de dados chamado RH.
Use o seguinte comando SQL:
GRANT SELECT ON HR.employees TO Joe
Joe pode recuperar informações da mesa dos funcionários. Ele não poderá, entretanto, conceder a outros usuários permissão para recuperar informações dessa tabela porque o script DCL não incluiu a cláusula WITH GRANT OPTION.
Revogando o acesso ao banco de dados
O comando REVOKE remove o acesso ao banco de dados de um usuário que tenha previamente concedido tal acesso. A sintaxe deste comando é definida da seguinte maneira:
REVOKE [GRANT OPTION FOR] [permission] ON [object] FROM [user] [CASCADE]
Aqui está o resumo dos parâmetros para o comando REVOKE:
- Permissão – especifica as permissões do banco de dados a serem removidas do usuário identificado. O comando revoga as afirmações GRANT e DENY feitas anteriormente para a permissão identificada.
- Objeto – pode ser qualquer objeto de banco de dados. As opções de privilégio válidas variam com base no tipo de objeto de banco de dados que você inclui nesta cláusula. Normalmente, o objeto será um banco de dados, função, procedimento armazenado, tabela ou visualização.
- Usuário – pode ser qualquer usuário do banco de dados. Você também pode substituir uma função para o usuário nesta cláusula se desejar fazer uso da segurança de banco de dados baseada em função.
- A cláusula GRANT OPTION FOR remove a capacidade do usuário especificado de conceder a permissão especificada a outros usuários. Se você incluir a cláusula GRANT OPTION FOR em uma instrução REVOKE, a permissão primária não será revogada. Esta cláusula revoga apenas a capacidade de concessão.
- A opção CASCADE também revoga a permissão especificada de todos os usuários aos quais o usuário especificado concedeu a permissão.
O comando a seguir revoga a permissão concedida a Joe no exemplo anterior:
REVOKE SELECT ON HR.employees FROM Joe
Negar explicitamente o acesso ao banco de dados
O comando DENY impede explicitamente que um usuário receba uma permissão específica.
Este recurso é útil quando um usuário é membro de uma função ou grupo ao qual foi concedida uma permissão e você deseja impedir que esse usuário individual herde a permissão criando uma exceção. A sintaxe deste comando é a seguinte:
DENY [permission] ON [object] TO [user]
Os parâmetros para o comando DENY são idênticos aos usados para o comando GRANT.
Por exemplo, se você deseja garantir que Matthew nunca receba a capacidade de excluir informações da tabela de funcionários, emita o seguinte comando:
DENY DELETE ON HR.employees TO Matthew