Melhores Práticas de Permissões
Padrões de menor privilégio para roles, grants e RLS do PostgreSQL em aplicações de produção.
Como Usar Esta Lista
- Implemente A a C antes do primeiro deploy em produção.
- Trate D e E como itens de checklist de auditoria de segurança trimestralmente.
- Emparelhe com revisões de migração - grants são alterações de schema.
A - Design de Roles
- O aplicativo se conecta com uma role de login não proprietária.
app_apinunca possui tabelas. - Migrações usam uma role separada
app_migrator. Direitos DDL não residem no pool de runtime. - Roles de grupo (NOLOGIN) modelam níveis de permissão.
app_readers,app_writers, evite logins por desenvolvedor em produção. - Zero uso de superusuário pela aplicação. Quebra de segurança apenas com MFA e logging.
- Revogue direitos perigosos de PUBLIC em clusters protegidos. Especialmente
CREATEno schemapublic.
B - Grants & Padrões
- Conceda
USAGEno schema antes dos privilégios de tabela. Erro de permissão mais comum. - Conceda sequências com tabelas para caminhos de INSERT.
USAGE, SELECTem sequências. - Configure ALTER DEFAULT PRIVILEGES para o proprietário da migração. Novas tabelas concedem automaticamente para roles do aplicativo.
- Grants em nível de coluna para campos sensíveis. SSN, tokens, PII não em
SELECTde analistas. - Documente exceções em comentários SQL de migração. Revisores futuros precisam do motivo.
C - Segurança em Nível de Linha (RLS)
- Habilite RLS em todas as tabelas com escopo de tenant em schema compartilhado. Não apenas na tabela de entidade principal.
- Use FORCE ROW LEVEL SECURITY em tabelas multi-tenant. Feche o bypass do proprietário da tabela.
- Defina GUC de tenant com SET LOCAL por transação. Contexto de tenant seguro para o pool.
- Espelhe USING e WITH CHECK para políticas de escrita. Previne inserts entre tenants.
- Indexe colunas referenciadas em expressões de política.
tenant_idà esquerda em compostos.
D - Bypass & Auditoria
- Inventarie roles com BYPASSRLS ou superusuário. Revisão de acesso trimestral.
- Minimize roles de quebra de segurança com senhas TTL. Registre no SIEM.
- Sem superusuário salvo em ferramentas GUI. Perfis pgAdmin/DBeaver usam
app_ro. - Teste RLS com fixtures automatizadas por tenant. CI captura regressões de política.
- Exportações pg_dump respeitam a classificação de dados. Dumps de superusuário ignoram RLS.
E - Operações
- REASSIGN OWNED ao desativar roles. Sem propriedade de objeto órfã.
- Limites de conexão por role de aplicativo. Contenha o raio de explosão de má configuração do pool.
- statement_timeout e idle_in_transaction_session_timeout por role. Proteja contra travamentos humanos e de bugs.
- search_path definido em roles de aplicativo.
app, publicnão apenas$user, public. - SCRAM-SHA-256 para roles de senha. Rotacione em eventos de desligamento.
FAQs
Role proprietária para migrações?
app_owner NOLOGIN; migrador SET ROLE app_owner ou a herda. O runtime nunca se conecta como proprietário.
RLS sem grants?
Ambos são necessários - grants permitem acesso à tabela; RLS filtra linhas dentro desse acesso.
Relacionados
- Noções Básicas de Roles - roles de login vs. grupo
- Privilégios Padrão - grants de objetos futuros
- Regras de Segurança - lista de políticas
Versões de Stack: Esta página foi escrita para PostgreSQL 18.4 (estável 18, manutenção 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x e PostGIS 3.5+.