DBAtlas · Atlas de operações de banco de dados

Manter logs de auditoria em nível de role e de objeto com pgaudit

PostgreSQLSegurança

Comando

-- Prerequisite: shared_preload_libraries = 'pgaudit' + restart, then:
CREATE EXTENSION pgaudit;

-- Session auditing: server-wide, only DDL and role/privilege changes
ALTER SYSTEM SET pgaudit.log = 'ddl, role';
ALTER SYSTEM SET pgaudit.log_relation = on;
ALTER SYSTEM SET pgaudit.log_parameter = off;
SELECT pg_reload_conf();

-- All reads/writes of a specific application role
ALTER ROLE web_app SET pgaudit.log = 'read, write';

-- Object auditing: privileges granted to the auditor role = operations to log
CREATE ROLE auditor NOLOGIN;
ALTER SYSTEM SET pgaudit.role = 'auditor';
SELECT pg_reload_conf();
GRANT SELECT, DELETE ON customer TO auditor;
GRANT UPDATE (balance) ON customer TO auditor;

O que faz

Registra, como linhas de log estruturadas com o prefixo 'AUDIT:', DDL e mudanças de privilégios em todo o servidor, todas as leituras/gravações de uma role específica e o acesso a tabelas/colunas sensíveis concedidas à role de auditor.

Quando usar

Para provar quem acessou dados sensíveis em auditorias de conformidade como GDPR, PCI-DSS ou SOX.

Atenção

Habilitar pgaudit.log = 'all' ou 'read' em todo o servidor aumenta muito o volume de log e o I/O; restrinja o escopo com auditoria por role ou por objeto. Um superusuário pode desligar a auditoria (ALTER SYSTEM/ALTER ROLE); envie os registros a um sistema central de logs (syslog/SIEM) e armazene-os independentemente do servidor de banco. log_parameter = on também registra os parâmetros de bind (dados pessoais). As configurações de role valem em novas sessões. A versão major do pgaudit deve coincidir com a versão major do PostgreSQL (pgaudit 17.x = PG17).

Abrir no DBAtlas →

Relacionados