Mantener logs de auditoría a nivel de rol y de objeto con pgaudit
PostgreSQLSeguridadComando
-- 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).
Relacionado
- Construir una jerarquía de roles de mínimo privilegio (GRANT + ALTER DEFAULT PRIVILEGES)
- Configurar el aislamiento de inquilinos con row-level security
- Validar el orden de las reglas de pg_hba.conf y recargar con seguridad
- Habilitar SSL/TLS y verificar las conexiones cifradas (pg_stat_ssl)
- Migrar de contraseñas md5 a scram-sha-256