Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

PG_AUDIT_LOG_CONFIG Linux / DevOps

Аудит действий пользователей и DDL команд в PostgreSQL через pgaudit

Обновлено: 24.08.2026
  • Отсутствие прозрачного журнала действий привилегированных пользователей и администраторов БД.
  • Необходимость соответствия требованиям стандартов безопасности (PCI-DSS, GDPR, ISO 27001, ФСТЭК).
  • Стандартный параметр log_statement = 'all' генерирует огромный неструктурированный объем мусорных логов.

1. Установка расширения pgAudit

# Для Debian / Ubuntu (PostgreSQL 15)
apt-get install -y postgresql-15-pgaudit

# Для RHEL / Rocky Linux
dnf install -y pgaudit15

2. Конфигурация в postgresql.conf

# Добавление библиотеки при старте сервера
shared_preload_libraries = 'pgaudit'

# Классы логируемых операций (READ, WRITE, FUNCTION, ROLE, DDL, MISC)
pgaudit.log = 'ddl, role, write, misc'

# Логировать параметры запросов (подставленные значения)
pgaudit.log_parameter = on

# Разделять аудит по уровням важности
pgaudit.log_level = 'log'
pgaudit.log_catalog = off
pgaudit.log_relation = on

3. Активация расширения в базе данных

Перезапустите PostgreSQL и выполните в целевой базе:

systemctl restart postgresql
psql -d mydb -c "CREATE EXTENSION pgaudit;"

4. Настройка аудита конкретной роли

Для исключения служебных мониторинговых учетных записей из аудита:

CREATE ROLE auditor_role;
GRANT auditor_role TO sensitive_user;
ALTER ROLE sensitive_user SET pgaudit.log = 'all';

5. Проверка формата записей аудита в логах

tail -f /var/log/postgresql/postgresql-15-main.log | grep "AUDIT:"

Вывод содержит структурированные поля: AUDIT: SESSION,1,1,DDL,CREATE TABLE,TABLE,public.accounts,...

💡 Практика специалистов: При включении pgaudit.log_parameter = on убедитесь, что в базу не передаются незашифрованные пароли или данные банковских карт, так как они попадут в открытый журнал audit log.

Частые вопросы (FAQ)

Чем pgaudit отличается от стандартного параметра log_statement = 'ddl'?

pgaudit обеспечивает детальный структурный разбор объектов (тип схемы, имя таблицы, затронутые колонки), логирует вложенные вызовы внутри хранимых процедур и позволяет настраивать избирательный аудит конкретных ролей.

Почему стоит выставлять pgaudit.log_catalog = off?

Значение 'off' отключает логирование обращений к системному каталогу PostgreSQL (pg_class, pg_namespace), предотвращая засорение журнала тысячами внутренних системных запросов.

Полезные материалы
Рекомендуем