DBAtlas · Атлас эксплуатации баз данных

Вести журналы аудита на уровне ролей и объектов через pgaudit

PostgreSQLБезопасность

Команда

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

Что делает

Записывает DDL и изменения привилегий по всему серверу, все чтения/записи определённой роли и доступ к чувствительным таблицам/столбцам, выданным роли аудитора, в виде структурированных строк журнала с префиксом 'AUDIT:'.

Когда использовать

Чтобы доказать, кто обращался к чувствительным данным, при аудитах соответствия, таких как GDPR, PCI-DSS или SOX.

Внимание

Включение pgaudit.log = 'all' или 'read' на весь сервер резко увеличивает объём журналов и I/O; сужайте область через аудит ролей или объектов. Суперпользователь может отключить аудит (ALTER SYSTEM/ALTER ROLE); отправляйте записи в центральную систему журналов (syslog/SIEM) и храните их независимо от сервера базы данных. log_parameter = on также журналирует bind-параметры (персональные данные). Настройки ролей вступают в силу в новых сессиях. Мажорная версия pgaudit должна совпадать с мажорной версией PostgreSQL (pgaudit 17.x = PG17).

Открыть в DBAtlas →

Связанные материалы