Несколько лет назад по требованию технического задания необходимо было сделать аудит базы данных.
База данных была на PostgreSQL, и особого выбора, кроме как pgAudit, не было.
Приступим к установке и настройке pgAudit.
Расширение pgAudit инсталируется из исходных кодов.
Установка
- Склонируйте официальный репозиторий:
git clone https://github.com/pgaudit/pgaudit.git
- Открываем созданную директорию pgaudit:
cd pgaudit
- Переключите ветку на необходимый релиз (вашу версию PostgreSQL)
git checkout REL_12_STABLE
- Сделайте сборку и установку pgAudit (обратите внимание на правильность пути к утилите pg_config):
sudo make install USE_PGXS=1 PG_CONFIG=/usr/pgsql-12/bin/pg_config
Может потребоваться установка утилиты make и других зависимостей.
Настройка
- Внесем корректировки в конфигурационный файл /var/lib/pgsql/12/data/postgresql.conf:
shared_preload_libraries = 'pgaudit'
- Перезапустите PostgreSQL
sudo service postgresql-12.service restart
- Зайдите в консоль psql под пользователем postgres
sudo -u postgres psql
- Установить расширение pgaudit:
CREATE EXTENSION pgaudit
- В конфигурационном файле /var/lib/pgsql/12/data/postgresql.conf с помощью опции pgaudit.log укажите какие классы запросов/команд необходимо аудировать (весь перечень и другие опции можно посмотреть в описании на github):
pgaudit.log = 'write, role, ddl'
- В конфигурационном файле postgresql.conf укажите роль, которая будет использоваться для аудита в опции pgaudit.role:
pgaudit.role = 'auditor'
- В конфигурационном файле postgresql.conf дополните префикс логирования следующим образом:
log_line_prefix = '%m %d %u %h '
Префикс содержит следующие данные и добавляется к каждой строке лога: дату(%m), название базы данных (%d), логин пользователя (%u) и удаленный адрес пользователя (%h).
- После изменения настроек postgresql.conf не забывайте перезагружать PostgreSQL, чтобы настройки применились.
- Создайте роль auditor:
create role auditor;
Аудит настраивается путем предоставления/отзыва прав на определенные операции для роли auditor.
- Добавить аудит на определенные действия можно следующими командами:
grant insert ON your_table to auditor; grant insert ON your_table to auditor; grant update ON your_table to auditor; grant delete ON your_table to auditor;
- Убрать аудит на определенные действия можно следующими командами:
revoke insert ON your_table to auditor; revoke insert ON your_table to auditor; revoke update ON your_table to auditor; revoke delete ON your_table to auditor;