DCL – Data Control Language
A DCL (Linguagem de Controle de Dados) é um conjunto de comandos SQL responsáveis pelo
gerenciamento de acessos e permissões em bancos de dados relacionais. Seus principais
comandos — GRANT e REVOKE — controlam quais usuários ou papéis
(roles) podem executar operações específicas em objetos do banco (tabelas, views,
procedures, etc.).
Conceitos Fundamentais
No PostgreSQL, a segurança é gerenciada por meio de papéis (roles), que podem representar usuários individuais ou grupos. Um papel pode:
- Ter permissão de login (atuando como usuário).
- Agrupar outros papéis (funcionando como um grupo de permissões).
- Ser proprietário de objetos (como tabelas ou bancos de dados).
Comandos Principais
| Comando | Descrição | Exemplo |
|---|---|---|
CREATE ROLE |
Cria um novo papel (usuário ou grupo). | CREATE ROLE analista WITH LOGIN PASSWORD 'senha123'; |
ALTER ROLE |
Modifica propriedades de um papel. | ALTER ROLE analista WITH CREATEDB; |
DROP ROLE |
Remove um papel. | DROP ROLE analista; |
GRANT |
Concede privilégios a um papel. | GRANT SELECT ON clientes TO analista; |
REVOKE |
Revoga privilégios. | REVOKE INSERT ON pedidos FROM analista; |
Opções do CREATE ROLE
Ao criar um papel, é possível definir atributos específicos:
- LOGIN / NOLOGIN: Permite ou não conexão ao banco.
- SUPERUSER / NOSUPERUSER: Define privilégios de superusuário.
- CREATEDB / NOCREATEDB: Permite criar bancos de dados.
- PASSWORD 'senha': Define uma senha (opcionalmente criptografada).
- VALID UNTIL 'data': Expiração da conta.
- CONNECTION LIMIT: Limite de conexões simultâneas.
CREATE ROLE auditor WITH
LOGIN
PASSWORD 'audit@2024'
VALID UNTIL '2024-12-31'
CONNECTION LIMIT 3;
Gerenciamento de Grupos
Papéis podem ser agrupados para facilitar o gerenciamento de permissões:
-- Cria um grupo
CREATE ROLE equipe_vendas;
-- Adiciona usuários ao grupo
GRANT equipe_vendas TO vendedor1, vendedor2;
-- Concede privilégios ao grupo
GRANT SELECT, INSERT ON vendas TO equipe_vendas;
-- Remove um usuário do grupo
REVOKE equipe_vendas FROM vendedor2;
Privilégios em Objetos
Os privilégios variam conforme o tipo de objeto. Os principais incluem:
- Tabelas/Views:
SELECT,INSERT,UPDATE,DELETE. - Funções:
EXECUTE. - Esquemas:
USAGE,CREATE.
-- Concede acesso a uma tabela
GRANT SELECT, UPDATE ON clientes TO analista;
-- Revoga todos os privilégios
REVOKE ALL ON pedidos FROM equipe_vendas;
Boas Práticas
- Princípio do Menor Privilégio: Conceda apenas as permissões necessárias.
- Use Grupos: Gerencie permissões por funções (ex:
equipe_vendas). - Auditoria: Consulte
pg_roleseinformation_schema.table_privilegespara monitorar acessos. - Validade de Senhas: Defina
VALID UNTILpara contas temporárias.
Exemplo Completo
Configuração de um sistema com papéis para diferentes níveis de acesso:
-- Cria papéis
CREATE ROLE admin WITH SUPERUSER CREATEDB CREATEROLE LOGIN PASSWORD 'Adm!n123';
CREATE ROLE leitor WITH LOGIN PASSWORD 'L3itur@';
CREATE ROLE editor WITH LOGIN PASSWORD 'Ed!t0r';
-- Concede privilégios
GRANT SELECT ON ALL TABLES IN SCHEMA public TO leitor;
GRANT SELECT, INSERT, UPDATE ON clientes, pedidos TO editor;
-- Cria um grupo e adiciona membros
CREATE ROLE equipe_marketing;
GRANT equipe_marketing TO leitor, editor;
Conclusão
O DCL é essencial para garantir a segurança e a governança de dados em bancos
relacionais. Seu domínio permite implementar políticas de acesso granular, alinhadas a
requisitos de compliance (como LGPD ou GDPR). No PostgreSQL, a flexibilidade dos papéis
e a combinação de GRANT/REVOKE oferecem um controle robusto
sobre quem pode acessar ou modificar cada objeto do banco.