Category Archive: Audit

Аудит PostgreSQL

Несколько лет назад по требованию технического задания необходимо было сделать аудит базы данных.

База данных была на PostgreSQL, и особого выбора, кроме как pgAudit, не было.

Приступим к установке и настройке pgAudit.

Расширение pgAudit инсталируется из исходных кодов.

Установка

  1. Склонируйте официальный репозиторий:
    git clone https://github.com/pgaudit/pgaudit.git
    
  2. Открываем созданную директорию pgaudit:
    cd pgaudit
    
  3. Переключите ветку на необходимый релиз (вашу версию PostgreSQL)
    git checkout REL_12_STABLE
    
  4. Сделайте сборку и установку pgAudit (обратите внимание на правильность пути к утилите pg_config):
    sudo make install USE_PGXS=1 PG_CONFIG=/usr/pgsql-12/bin/pg_config
    
    Может потребоваться установка утилиты make и других зависимостей.

Настройка

  1. Внесем корректировки в конфигурационный файл /var/lib/pgsql/12/data/postgresql.conf:
    shared_preload_libraries = 'pgaudit'
    
  2. Перезапустите PostgreSQL
    sudo service postgresql-12.service restart
    
  3. Зайдите в консоль psql под пользователем postgres
    sudo -u postgres psql
    
  4. Установить расширение pgaudit:
    CREATE EXTENSION pgaudit
    
  5. В конфигурационном файле /var/lib/pgsql/12/data/postgresql.conf с помощью опции pgaudit.log укажите какие классы запросов/команд необходимо аудировать (весь перечень и другие опции можно посмотреть в описании на github):
    pgaudit.log = 'write, role, ddl'
    
  6. В конфигурационном файле postgresql.conf укажите роль, которая будет использоваться для аудита в опции pgaudit.role:
    pgaudit.role = 'auditor'
    
  7. В конфигурационном файле postgresql.conf дополните префикс логирования следующим образом:
    log_line_prefix = '%m %d %u %h '
    

    Префикс содержит следующие данные и добавляется к каждой строке лога: дату(%m), название базы данных (%d), логин пользователя (%u) и удаленный адрес пользователя (%h).

  8. После изменения настроек postgresql.conf не забывайте перезагружать PostgreSQL, чтобы настройки применились.
  9. Создайте роль auditor:
    create role auditor;
     

    Аудит настраивается путем предоставления/отзыва прав на определенные операции для роли auditor.

  10. Добавить аудит на определенные действия можно следующими командами:
    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;
    
  11. Убрать аудит на определенные действия можно следующими командами:
    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;