Gerenciamento de Roles
╔══════════════════════════════════════════════════════════════╗
║ ROLE_MASTER >> Gerenciamento de Roles e Grupos ║
║ INSTRUTOR: ROLE_SPECIALIST ║
╚══════════════════════════════════════════════════════════════╝
Conceitos Básicos
ROLE_SPECIALIST explica: "Roles são fundamentais para organizar e gerenciar permissões de forma eficiente!"
-- Criar role básica
CREATE ROLE nome_role;
-- Criar role com login
CREATE ROLE usuario_app WITH
LOGIN
PASSWORD 'senha_segura'
VALID UNTIL '2024-12-31';
Tipos de Roles
1. Roles de Aplicação
-- Role para aplicação web
CREATE ROLE app_web WITH LOGIN;
GRANT CONNECT ON DATABASE app_db TO app_web;
GRANT USAGE ON SCHEMA public TO app_web;
GRANT SELECT, INSERT, UPDATE ON tabela_usuarios TO app_web;
2. Roles de Grupo
-- Role para equipe de analistas
CREATE ROLE analistas;
GRANT SELECT ON ALL TABLES IN SCHEMA analytics TO analistas;
GRANT USAGE ON SCHEMA analytics TO analistas;
-- Atribuir usuários ao grupo
GRANT analistas TO analista1, analista2, analista3;
Hierarquia de Roles
HIERARCHY_MASTER demonstra a estruturação:
-- Estrutura hierárquica
CREATE ROLE junior_dev;
CREATE ROLE senior_dev;
CREATE ROLE tech_lead;
-- Estabelecer hierarquia
GRANT junior_dev TO senior_dev;
GRANT senior_dev TO tech_lead;
-- Configurar permissões por nível
GRANT SELECT ON app_tables TO junior_dev;
GRANT INSERT, UPDATE ON app_tables TO senior_dev;
GRANT ALL PRIVILEGES ON app_tables TO tech_lead;
Gerenciamento de Permissões
1. Atribuição de Privilégios
-- Privilégios básicos
GRANT SELECT, INSERT ON tabela TO role_name;
-- Privilégios administrativos
GRANT CREATE ON DATABASE app_db TO admin_role;
GRANT USAGE, CREATE ON SCHEMA public TO dev_role;
2. Revogação de Privilégios
-- Revogar privilégios
REVOKE INSERT, UPDATE ON dados_sensiveis FROM role_name;
-- Revogar membership
REVOKE analistas FROM ex_analista;
Boas Práticas
SECURITY_EXPERT compartilha diretrizes:
1. Organização
-- Nomenclatura consistente
CREATE ROLE app_read; -- Apenas leitura
CREATE ROLE app_write; -- Leitura e escrita
CREATE ROLE app_admin; -- Administração
-- Documentação
COMMENT ON ROLE app_read IS 'Role para acesso somente leitura';
2. Auditoria
-- Visualizar membros de role
SELECT r.rolname, m.member, u.usename
FROM pg_roles r
LEFT JOIN pg_auth_members m ON r.oid = m.roleid
LEFT JOIN pg_user u ON m.member = u.usesysid;
-- Verificar privilégios
SELECT * FROM information_schema.role_table_grants
WHERE grantee = 'role_name';
╔════════════════════════════════════════════╗
║ CHECKLIST DE ROLES: ║
║ □ Nomenclatura padronizada? ║
║ □ Hierarquia bem definida? ║
║ □ Privilégios mínimos necessários? ║
║ □ Documentação atualizada? ║
║ □ Auditoria configurada? ║
╚════════════════════════════════════════════╝
Cenários Comuns
IMPLEMENTATION_EXPERT apresenta soluções práticas:
1. Setup de Desenvolvimento
-- Role para desenvolvedores
CREATE ROLE dev_team;
GRANT CONNECT ON DATABASE dev_db TO dev_team;
GRANT USAGE, CREATE ON SCHEMA public TO dev_team;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO dev_team;
2. Setup de Produção
-- Role para aplicação em produção
CREATE ROLE prod_app WITH LOGIN;
GRANT CONNECT ON DATABASE prod_db TO prod_app;
GRANT USAGE ON SCHEMA public TO prod_app;
GRANT SELECT, INSERT ON tabela_clientes TO prod_app;
GRANT EXECUTE ON FUNCTION proc_negocio TO prod_app;
Troubleshooting
PROBLEM_SOLVER apresenta soluções:
1. Diagnóstico
-- Verificar conflitos
SELECT r.rolname,
r.rolsuper,
r.rolinherit,
r.rolcreaterole,
r.rolcreatedb
FROM pg_roles r
WHERE r.rolname = 'role_problema';
-- Verificar sessões ativas
SELECT pid, usename, application_name
FROM pg_stat_activity
WHERE usename IN (
SELECT m.member::regrole::text
FROM pg_roles r
JOIN pg_auth_members m ON r.oid = m.roleid
WHERE r.rolname = 'role_problema'
);
2. Manutenção
-- Limpar roles não utilizadas
SELECT r.rolname
FROM pg_roles r
LEFT JOIN pg_auth_members m ON r.oid = m.roleid
WHERE m.roleid IS NULL
AND NOT r.rolcanlogin;
-- Atualizar expiração
ALTER ROLE usuario_temporario
VALID UNTIL '2024-06-30';
Conclusão
ROLE_SPECIALIST conclui: "Um bom gerenciamento de roles é fundamental para segurança e organização do banco de dados."
26 abril 2025