Segurança PostgreSQL e LGPD — Checklist Completo 2026.
Segurança de PostgreSQL não termina em senha forte. Em ambientes que tratam dados pessoais, cada camada — role, conexão, linha, coluna, log, backup — precisa responder a uma pergunta objetiva da LGPD: quem pode acessar, o que acessou, quando, e como você prova? Este checklist é a base técnica que a HTI aplica em consultoria PostgreSQL e Health Checks focados em compliance.
O texto abaixo não é jurídico — é operacional. Cada item traz o comando, o parâmetro ou o padrão de configuração, e a conexão com o artigo da LGPD que ele endereça. Feito para DBA, arquiteto de dados e CTO que precisam sair da "conformidade no papel" para hardening real e auditável.
O QUE A LGPD EXIGE DO BANCO — TRADUZIDO EM CONTROLES TÉCNICOS
Quatro artigos da Lei nº 13.709/2018 concentram praticamente todas as obrigações que aterrissam no PostgreSQL:
- Art. 6, VII (segurança): uso de medidas técnicas para proteger dados pessoais de acessos não autorizados — mapeia para roles, RLS, pg_hba, criptografia.
- Art. 37 (registro): manutenção de registro das operações de tratamento — mapeia para pgAudit, log_statement, retenção controlada.
- Art. 46 (proteção): medidas de segurança aptas a proteger dados pessoais de acessos, destruição, alteração — mapeia para backup, DR testado, criptografia em repouso.
- Art. 48 (notificação): comunicação de incidente de segurança à ANPD e ao titular em prazo razoável — mapeia para monitoramento comportamental, detecção e runbook de incidente.
"Conformidade em LGPD não é ter os documentos assinados — é conseguir responder tecnicamente 'quem, quando, o quê' em 48 horas após um incidente."
01
ROLES, GRANT E PRIVILÉGIO MÍNIMO
O erro mais comum em ambientes PostgreSQL auditados: a aplicação conecta como postgres (superuser) ou como um usuário com SUPERUSER herdado. Isso destrói qualquer controle de segurança acima: RLS não se aplica, pgAudit registra "root", e qualquer SQL injection vira comprometimento total.
Padrão mínimo de roles em produção
Auditar privilégios em uso
- ☐
Aplicação NUNCA conecta como superuser ou dono do schema
Art. 6, VII — Segurança e privilégio mínimo
- ☐
Cada aplicação/serviço tem role próprio com escopo dedicado
Art. 6, VII — Segregação de responsabilidades
- ☐
Senhas de role rotacionadas em ciclo definido em política
Art. 46 — Medidas de proteção
- ☐
Acesso humano via role individual — nunca credencial compartilhada
Art. 37 — Rastreabilidade individual
- ☐
ALTER DEFAULT PRIVILEGES configurado para novos objetos
Art. 6, VII — Segurança contínua
02
pg_hba.conf — A PRIMEIRA BARREIRA
pg_hba.conf é o firewall de autenticação do Postgres. Ele decide quem pode conectar, de onde, em qual banco, com qual método. Um host all all 0.0.0.0/0 trust perdido em um arquivo torna todos os outros controles decorativos.
Detalhes que fazem diferença: hostssl (não host) força TLS; scram-sha-256 substitui o antigo md5; range CIDR restrito por perfil de acesso (aplicação vs DBA vs replicação); clientcert=verify-full para acesso administrativo — dupla autenticação (senha + certificado); regra final reject torna o comportamento explícito e auditável.
- ☐
Sem entradas trust em ambiente com dados pessoais
Art. 6, VII — Segurança de acesso
- ☐
Todas as conexões remotas usam hostssl (TLS obrigatório)
Art. 46 — Confidencialidade em trânsito
- ☐
Método scram-sha-256 (não md5) para autenticação por senha
Art. 6, VII — Medida técnica adequada
- ☐
Ranges CIDR restritos por perfil — sem 0.0.0.0/0 aberto
Art. 6, VII — Superfície de ataque mínima
- ☐
Alterações em pg_hba.conf versionadas em Git com revisão obrigatória
Art. 37 — Rastreabilidade de mudanças
03
ROW-LEVEL SECURITY — ISOLAMENTO POR LINHA
RLS filtra automaticamente linhas visíveis por role/sessão. Em SaaS multi-tenant, é o padrão para garantir que cliente A jamais leia dado de cliente B — mesmo com bug de autorização na aplicação. Em ambientes single-tenant com dados sensíveis, isola áreas do negócio (financeiro vê financeiro; RH vê RH).
Armadilhas comuns de RLS
- Esquecer
FORCE ROW LEVEL SECURITY: por default, o dono da tabela ignora RLS — se sua aplicação for dona da tabela, RLS não faz nada.FORCEobriga. - Superuser bypass: superuser sempre ignora RLS. Motivo extra para aplicação nunca conectar como superuser.
- Testar apenas com o mesmo role da aplicação: valide com role de leitor externo e usuário sem grants para confirmar que RLS bloqueia como esperado.
- Política sem cláusula
WITH CHECK: a policy filtra leitura, mas permite insert/update gravando linhas de outro tenant. AdicioneWITH CHECKexplícito.
- ☐
RLS ativa em toda tabela contendo dados pessoais em ambiente multi-tenant
Art. 6, VII — Segregação lógica de titulares
- ☐
FORCE ROW LEVEL SECURITY nas tabelas cujo owner é role de aplicação
Art. 6, VII — Prevenção de bypass
- ☐
Políticas com USING e WITH CHECK definidas separadamente
Art. 6, VII — Controle de leitura e escrita
- ☐
Cobertura de RLS testada em pipeline (integração contínua)
Art. 37 — Verificação contínua de controle
04
pgAudit — TRILHA AUDITÁVEL DE ACESSO
log_statement = 'all' registra tudo, mas é ruído puro em produção. pgAudit é a extensão-padrão para auditoria estruturada em Postgres: separa DDL, DML, ROLE, categoriza por classe e emite log parseável por SIEM. Recomendado por CIS Benchmark e usado por virtualmente toda operação Postgres com exigência regulatória.
Auditoria só cumpre a LGPD quando o log sai do banco: envie para SIEM externo (Elastic, Splunk, Datadog, CloudWatch, Wazuh) com retenção definida em política e integridade preservada (write-once ou hash-chained). Log auditoria que fica no mesmo servidor do banco é apagado no primeiro comprometimento.
Auditoria seletiva por objeto (menos ruído)
- ☐
pgAudit ativa registrando ao menos read, write, ddl, role
Art. 37 — Registro das operações de tratamento
- ☐
Logs enviados para SIEM externo com retenção mínima de 12 meses
Art. 37 — Integridade e disponibilidade do registro
- ☐
Alertas sobre operações sensíveis roteados para plantão 24/7
Art. 48 — Detecção de incidente
- ☐
Acesso ao SIEM registrado — auditoria do auditor
Art. 37 — Cadeia de custódia
05
CRIPTOGRAFIA EM TRÂNSITO, EM REPOUSO E EM COLUNA
Três camadas independentes — omitir qualquer uma cria vetor de vazamento:
- Em trânsito: TLS obrigatório via
ssl = on+ssl_cert_file/ssl_key_file,ssl_min_protocol_version = 'TLSv1.2'ou superior, cifras modernas apenas. Aplicações devem usarsslmode=verify-full. - Em repouso: criptografia de disco (LUKS em bare-metal; AWS EBS encryption, Azure Disk Encryption, GCP CMEK em cloud) ativa em todo volume que armazena datafiles, WAL e backup. TDE nativa não existe em Postgres open-source — a criptografia é feita em camada de storage.
- Em coluna (opcional/sensível):
pgcryptopara campos especialmente sensíveis (CPF, cartão, dados de saúde).pgp_sym_encrypt()com chave gerenciada em KMS externo. Aceita custo de performance em troca de proteção mesmo em cenário de dump vazado.
- ☐
TLS 1.2+ obrigatório em toda conexão remota (hostssl + ssl_min_protocol)
Art. 46 — Confidencialidade em trânsito
- ☐
Criptografia de disco ativa em datafiles, WAL, tablespaces e backups
Art. 46 — Proteção contra acesso físico não autorizado
- ☐
Colunas especialmente sensíveis com pgcrypto e chave em KMS externo
Art. 46 — Proteção adicional para dados sensíveis
- ☐
Certificados renovados automaticamente com alerta antes de expirar
Art. 6, VII — Continuidade da medida técnica
06
BACKUP, RETENÇÃO E DIREITO AO ESQUECIMENTO
Backup criptografado, armazenado fora da mesma conta/tenant de produção, restaurado em teste periódico. E — muito ignorado em ambientes brasileiros — retenção definida em política: guardar tudo para sempre viola o princípio da necessidade (Art. 6, III) e cria passivo em eventual incidente. Direito ao esquecimento (Art. 18, VI) obriga o controlador a eliminar dados do titular a pedido; se o backup guarda esses dados por 10 anos sem processo de expiração, você não consegue cumprir.
- ☐
Backup criptografado com pgBackRest ou Barman (chave gerenciada)
Art. 46 — Proteção do dado em repouso
- ☐
Backup armazenado em conta/tenant separado da produção
Art. 46 — Segregação de blast radius
- ☐
Restore testado em ambiente isolado nos últimos 90 dias
Art. 46 — Disponibilidade auditável
- ☐
Retenção de backup definida em política e aplicada automaticamente
Art. 6, III — Necessidade e finalidade
- ☐
Processo documentado para atender pedido de eliminação incluindo backup
Art. 18, VI — Direito ao esquecimento
07
MONITORAMENTO COMPORTAMENTAL E RESPOSTA A INCIDENTE
LGPD (Art. 48) exige comunicar incidente à ANPD e ao titular em prazo razoável — a ANPD tem sinalizado 3 dias úteis como referência. Isso é impossível se você só descobre o vazamento pelo cliente ou pela imprensa. Monitoramento comportamental (não só métrica de infra) é o que faz a detecção acontecer durante o incidente, não depois.
Padrões a monitorar em nível de banco: SELECT em massa fora do horário; dump inesperado de tabela sensível; criação de role com privilégio elevado; alteração de pg_hba.conf; falhas repetidas de autenticação; queries com padrão de data exfiltration (paginação sequencial de grande volume). Em ambientes operados pela HTI, isso é feito com DBSnoop — ferramenta comportamental proprietária que rastreia desvios além de CPU/RAM, aplicável a Postgres, MySQL, SQL Server e Oracle.
- ☐
Monitoramento comportamental ativo, não só métrica de infra
Art. 48 — Detecção de incidente em tempo real
- ☐
Alerta 24/7 roteado para plantão real (não caixa de e-mail)
Art. 48 — Resposta em prazo razoável
- ☐
Runbook de incidente com passos de contenção, análise e notificação
Art. 48 — Resposta estruturada
- ☐
Post-mortem documentado após cada incidente e revisão trimestral
Art. 37 — Melhoria contínua
CHECKLIST FINAL — VERSÃO PARA COMPARTILHAR
Consolidação por categoria. Use como base para reunião com CISO, DPO ou auditoria externa:
- ☐ Aplicação sem privilégios de superuser ou de owner do schema.
- ☐ Roles individuais para cada humano com acesso ao banco.
- ☐ pg_hba.conf sem trust; hostssl + scram-sha-256 em todas as entradas.
- ☐ TLS 1.2+ obrigatório; certificados válidos e monitorados.
- ☐ Criptografia de disco ativa em datafiles, WAL e backup.
- ☐ RLS ativa e FORCE em tabelas com dados de múltiplos titulares.
- ☐ pgAudit configurada (read/write/ddl/role) enviando log para SIEM externo.
- ☐ Retenção de log definida em política e aplicada automaticamente.
- ☐ Backup criptografado, off-site, com restore validado nos últimos 90 dias.
- ☐ Política de retenção de dados aplicada (não guardar para sempre).
- ☐ Processo documentado para atender direito de eliminação (inclui backup).
- ☐ Monitoramento comportamental 24/7 com alerta roteado para plantão real.
- ☐ Runbook de incidente com prazo alinhado ao Art. 48 (comunicação à ANPD).
- ☐ Health Check independente executado nos últimos 12 meses.
PRÓXIMO PASSO
Seu PostgreSQL passa nesse checklist?
Auditoria de segurança PostgreSQL alinhada à LGPD — roles, pg_hba, RLS, pgAudit, criptografia, retenção. Relatório com achados por severidade e roadmap acionável.
PERGUNTAS FREQUENTES
A LGPD exige criptografia obrigatória no PostgreSQL?
A LGPD (Art. 46) exige adoção de medidas técnicas de segurança apropriadas ao risco — não cita 'criptografia' como palavra literal, mas em qualquer análise de risco envolvendo dados pessoais em produção, criptografia em trânsito (TLS/SSL) é considerada baseline e criptografia em repouso é fortemente esperada. Na prática: TLS obrigatório sempre; criptografia de disco (LUKS, EBS encryption, TDE gerenciado) obrigatório em dados sensíveis; criptografia de coluna (pgcrypto) para dados especialmente sensíveis (CPF, cartão, saúde). A ausência dessas medidas em incidente com vazamento pesa contra o controlador em análise da ANPD.
Row-Level Security (RLS) substitui autorização na aplicação?
Não — complementa. RLS é última barreira: se a aplicação tiver bug de autorização ou credencial vazar, RLS impede que um usuário leia dados de outro tenant. Em SaaS multi-tenant, RLS baseada em role ou em session variable (via SET LOCAL app.current_tenant) é o padrão para isolar linhas por cliente. Continua sendo obrigatório validar autorização também na camada da aplicação (defense in depth). RLS mal escrita, com FORCE ausente no proprietário da tabela, dá falsa sensação de segurança — teste sempre com role diferente de superuser.
pgAudit é obrigatório para conformidade LGPD?
Não é citado explicitamente na LGPD, mas o Art. 37 exige que o controlador mantenha registro das operações de tratamento e o Art. 46 pede medidas de segurança. Sem trilha auditável de acesso a dados pessoais, é praticamente impossível responder a: 'quem acessou o CPF do titular X entre janeiro e março?' — pergunta padrão em requerimento de titular ou em análise de incidente. pgAudit (ou logging equivalente centralizado com retenção e integridade) é o padrão de mercado. Configuração mínima: pgaudit.log = 'read, write, ddl, role' com envio dos logs para SIEM externo com retenção definida em política.
Quanto tempo devo reter logs de acesso ao banco para LGPD?
A LGPD não estipula prazo específico para logs de acesso — o prazo deriva da política interna de retenção, do princípio da necessidade (Art. 6, III) e das exigências de outros regimes que se apliquem (Marco Civil da Internet exige 6 meses para logs de aplicação; setores regulados como financeiro e saúde têm prazos próprios de 5 a 20 anos). Baseline razoável: 12 meses de logs quentes acessíveis para investigação + 5 anos de logs frios em storage imutável para atender auditoria. Retenção maior que 12 meses de logs contendo dados pessoais requer justificativa e base legal — não guarde por default.
Continue lendo
- → Consultoria PostgreSQL — visão completa do serviço
- → DBA Remoto PostgreSQL — operação 24/7
- → Consultoria PostgreSQL Alta Disponibilidade
- → Performance Tuning PostgreSQL — Guia Completo 2026
- → Segurança MySQL e LGPD — Checklist Completo
- → Segurança de Banco de Dados — landing do serviço
- → Health Check de Banco de Dados