DBAtlas · Atlas für Datenbankbetrieb

Audit-Logs auf Rollen- und Objektebene mit pgaudit führen

PostgreSQLSicherheit

Befehl

-- 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;

Was es tut

Protokolliert serverweit DDL und Rechteänderungen, alle Lese-/Schreibvorgänge einer bestimmten Rolle und Zugriffe auf sensible Tabellen/Spalten, die der Auditor-Rolle gewährt sind, als strukturierte Log-Zeilen mit dem Präfix 'AUDIT:'.

Wann einsetzen

Um bei Compliance-Audits wie DSGVO, PCI-DSS oder SOX nachzuweisen, wer auf sensible Daten zugegriffen hat.

Vorsicht

pgaudit.log = 'all' oder 'read' serverweit zu aktivieren, steigert Log-Volumen und I/O stark; grenze den Umfang mit Rollen- oder Objekt-Auditing ein. Ein Superuser kann das Auditing abschalten (ALTER SYSTEM/ALTER ROLE); leite die Einträge an ein zentrales Log-System (syslog/SIEM) und speichere sie unabhängig vom Datenbankserver. log_parameter = on protokolliert auch Bind-Parameter (personenbezogene Daten). Rolleneinstellungen wirken in neuen Sessions. Die Major-Version von pgaudit muss der Major-Version von PostgreSQL entsprechen (pgaudit 17.x = PG17).

In DBAtlas öffnen →

Verwandte Einträge