DBAtlas · Atlas de operaciones de bases de datos

Mantener logs de auditoría a nivel de rol y de objeto con pgaudit

PostgreSQLSeguridad

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;

Qué hace

Registra los cambios de DDL y de privilegios en todo el servidor, todas las lecturas/escrituras de un rol concreto y el acceso a tablas/columnas sensibles concedidas al rol auditor, como líneas de log estructuradas con el prefijo 'AUDIT:'.

Cuándo usarlo

Para demostrar quién accedió a datos sensibles en auditorías de cumplimiento como GDPR, PCI-DSS o SOX.

Precaución

Habilitar pgaudit.log = 'all' o 'read' en todo el servidor aumenta mucho el volumen de log y la I/O; acote el alcance con auditoría por rol o por objeto. Un superusuario puede desactivar la auditoría (ALTER SYSTEM/ALTER ROLE); envíe los registros a un sistema de logs central (syslog/SIEM) y almacénelos de forma independiente del servidor de base de datos. log_parameter = on también registra los parámetros bind (datos personales). Los ajustes de rol surten efecto en las sesiones nuevas. La versión mayor de pgaudit debe coincidir con la versión mayor de PostgreSQL (pgaudit 17.x = PG17).

Abrir en DBAtlas →

Relacionado