DCL - Linguagem de Controle de Dados
╔══════════════════════════════════════════════════════════════╗
║ SECURITY_MASTER >> Controle de Acesso a Dados ║
║ INSTRUTOR: SECURITY_SPECIALIST ║
╚══════════════════════════════════════════════════════════════╝
Visão Geral
SECURITY_SPECIALIST apresenta: "A Linguagem de Controle de Dados (DCL) é fundamental para gerenciar segurança e acesso em bancos de dados."
Comandos Principais
1. GRANT
PERMISSION_MASTER explica: "Concede privilégios a usuários e roles"
-- Privilégios básicos
GRANT SELECT, INSERT ON tabela TO usuario;
-- Todos os privilégios
GRANT ALL PRIVILEGES ON DATABASE banco TO admin;
-- Privilégios específicos
GRANT UPDATE(salario) ON funcionarios TO rh_manager;
2. REVOKE
ACCESS_CONTROLLER demonstra: "Remove privilégios concedidos"
-- Revogar privilégios específicos
REVOKE INSERT, UPDATE ON produtos FROM usuario;
-- Revogar todos os privilégios
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM usuario;
3. Gerenciamento de ROLES
ROLE_MASTER apresenta: "Organiza privilégios em grupos lógicos"
-- Criar role
CREATE ROLE analistas;
-- Atribuir privilégios à role
GRANT SELECT ON ALL TABLES IN SCHEMA analytics TO analistas;
-- Atribuir role a usuário
GRANT analistas TO usuario;
Padrões de Segurança
SECURITY_ARCHITECT compartilha padrões essenciais:
1. Princípio do Menor Privilégio
-- Criar role com privilégios mínimos
CREATE ROLE app_read;
GRANT SELECT ON tabela1, tabela2 TO app_read;
GRANT USAGE ON SCHEMA public TO app_read;
-- Revogar privilégios desnecessários
REVOKE ALL ON ALL TABLES IN SCHEMA public FROM PUBLIC;
2. Hierarquia de Roles
-- Estrutura hierárquica
CREATE ROLE junior_dev;
CREATE ROLE senior_dev;
CREATE ROLE tech_lead;
GRANT junior_dev TO senior_dev;
GRANT senior_dev TO tech_lead;
3. Segurança em Nível de Coluna
-- Restringir acesso a colunas sensíveis
GRANT SELECT (nome, email) ON usuarios TO suporte;
REVOKE SELECT (senha_hash) ON usuarios FROM suporte;
Boas Práticas
SECURITY_GUARDIAN compartilha diretrizes:
1. Auditoria
-- Criar tabela de auditoria
CREATE TABLE audit_log (
id SERIAL PRIMARY KEY,
usuario TEXT,
acao TEXT,
tabela TEXT,
data TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Trigger para auditoria
CREATE TRIGGER audit_changes
AFTER INSERT OR UPDATE OR DELETE ON dados_sensiveis
FOR EACH ROW EXECUTE FUNCTION log_changes();
2. Revisão Regular
-- Consultar privilégios existentes
SELECT grantee, privilege_type, table_name
FROM information_schema.role_table_grants
WHERE table_schema = 'public';
-- Verificar membros de roles
SELECT rolname, member
FROM pg_roles r
JOIN pg_auth_members m ON r.oid = m.roleid;
3. Rotação de Credenciais
-- Alterar senha de usuário
ALTER USER aplicacao_user WITH PASSWORD 'novo_password_seguro';
-- Revogar e reconectar sessões
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE usename = 'aplicacao_user';
Cenários Comuns
IMPLEMENTATION_EXPERT apresenta soluções práticas:
1. Ambiente de Desenvolvimento
-- Setup inicial
CREATE ROLE dev_team;
GRANT CONNECT ON DATABASE dev_db TO dev_team;
GRANT USAGE ON SCHEMA public TO dev_team;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO dev_team;
2. Ambiente de Produção
-- Setup de produção
CREATE ROLE app_service;
GRANT CONNECT ON DATABASE prod_db TO app_service;
GRANT USAGE ON SCHEMA public TO app_service;
GRANT SELECT, INSERT ON tabela_cliente TO app_service;
GRANT UPDATE (status, ultima_atualizacao) ON tabela_pedido TO app_service;
Troubleshooting
PROBLEM_SOLVER apresenta soluções para problemas comuns:
1. Conflitos de Privilégios
-- Verificar privilégios efetivos
SELECT * FROM information_schema.role_table_grants
WHERE grantee = 'usuario_problematico';
-- Resetar privilégios
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM usuario_problematico;
GRANT SELECT ON tabela_especifica TO usuario_problematico;
2. Problemas de Acesso
-- Diagnosticar problemas de conexão
SELECT * FROM pg_stat_activity
WHERE usename = 'usuario_problema';
-- Verificar configurações de autenticação
SELECT rolname, rolcanlogin, rolvaliduntil
FROM pg_roles
WHERE rolname = 'usuario_problema';
╔════════════════════════════════════════════╗
║ CHECKLIST SEGURANÇA: ║
║ □ Privilégios mínimos? ║
║ □ Roles apropriadas? ║
║ □ Auditoria ativa? ║
║ □ Senhas fortes? ║
║ □ Revisão regular? ║
╚════════════════════════════════════════════╝
Conclusão
SECURITY_SPECIALIST conclui: "O DCL é crucial para manter a segurança e integridade do banco de dados. Implemente controles de acesso cuidadosamente e revise-os regularmente."
26 abril 2025