qhb_audit

Расширение для осуществления аудита действий QHB.


Настройка

Подключение расширения осуществляется путем установки параметров в файле конфигурации qhb.conf. Для автоматической загрузки расширения при старте экземпляра нужно добавить в qhb.conf следующую строку:

shared_preload_libraries = 'libqhb_audit'

Если параметр shared_preload_libraries уже задан, то в него нужно добавить значение libqhb_audit через запятую, например:

shared_preload_libraries = 'pg_store_plans,pg_stat_statements,libqhb_audit'

Общие параметры считываются только при инициализации расширения (при старте СУБД):

  • qhb_audit.queue_memory: объем разделяемой памяти, выделяемой для внутренней очереди сообщений. По умолчанию — 100 МиБ.
  • qhb_audit.queue_capacity: максимальный размер внутренней очереди сообщений. По умолчанию — 1000 событий.

Если перезагрузка сервера невозможна, допускается обновление параметров с помощью команды qhb_ctl reload.


Параметры для записи событий в файл:

  • qhb_audit.csv_file: путь к файлу, куда будут записываться события. Данную настройку можно менять «на лету». Если не задан, запись событий в файл не осуществляется.


Параметры для отправки событий по REST API:

  • qhb_audit.rest_url: URL веб-сервера, принимающий сообщения через REST API. Данную настройку можно менять «на лету». Если не задан, отправка событий не осуществляется. Если заданы qhb_audit.rest_url и qhb_audit.csv_file то осуществляется ТОЛЬКО запись событий в CSV файл.
  • qhb_audit.rest_max_attempts: максимальное количество попыток отправить событие на сервер при его недоступности.
  • qhb_audit.rest_attempts_interval_ms: интервал в миллисекундах между попытками отправить сообщение на сервер при его недоступности.

Формат CSV файла

Вновь созданный CSV файл будет состоять из заголовка (первая строка) и непосредственно событий (остальные строки) со следующими полями:

  • название события;
  • время, когда событие произошло, в формате RFC3339, например 2018-02-14T00:28:07Z;
  • имя пользователя, под управлением которого произошло событие;
  • название базы данных (задается только при попытке подключения);
  • IP-адрес или имя хоста удаленного клиента (задается только при попытке подключения);
  • порт удаленного клиента (задается только при попытке подключения);
  • успешная ли была попытка (задается только при попытке подключения);
  • имя таблицы (задается только при DDL-операциях на таблице);
  • новое имя таблицы (задается только при операции переименования таблицы);
  • имя базы данных (задается только при DDL-операциях на базе данных);
  • новое имя базы данных (задается только при операции переименования базы данных).

Формат сообщений через REST API

Сообщения о событиях отправляются в формате JSON со следующей схемой:

НаименованиеТип переменнойОписаниеОбязательный
tagsstring[]Сквозные идентификаторы и метки, позволяющие группировать событияДа
DatetimeintegerUnix time. Время возникновения события в миллисекундах, прошедших с полуночи (00:00:00 UTC) 1 января 1970 года. (Fri Apr 03 2020 10:28:37 соответствует 1585909717000)Да
serviceNamestringИдентификатор СервисаДа
serviceVersionstringВерсия СервисаДа
namestringНаименование события аудитаДа
paramsobject[]Список параметров события аудита в формате: Name (string): наименование параметра события аудита, Value (string):значение параметра событияДа
sessionIDstringИдентификатор сессии (если есть)Нет
userLoginstringЛогин пользователяДа
userNamestringИмя пользователяНет
userNodestringУзел (IP/FQDN), с которого пользователь выполняет действияНет

Отслеживаемые события

  • Команды DDL: CREATE TABLE, DROP TABLE, ALTER TABLE, TRUNCATE TABLE, CREATE DATABASE, DROP DATABASE, ALTER DATABASE.
  • Попытки подключения клиентов.