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 со следующей схемой:
Наименование | Тип переменной | Описание | Обязательный |
---|---|---|---|
tags | string[] | Сквозные идентификаторы и метки, позволяющие группировать события | Да |
Datetime | integer | Unix time. Время возникновения события в миллисекундах, прошедших с полуночи (00:00:00 UTC) 1 января 1970 года. (Fri Apr 03 2020 10:28:37 соответствует 1585909717000) | Да |
serviceName | string | Идентификатор Сервиса | Да |
serviceVersion | string | Версия Сервиса | Да |
name | string | Наименование события аудита | Да |
params | object[] | Список параметров события аудита в формате: Name (string): наименование параметра события аудита, Value (string):значение параметра события | Да |
sessionID | string | Идентификатор сессии (если есть) | Нет |
userLogin | string | Логин пользователя | Да |
userName | string | Имя пользователя | Нет |
userNode | string | Узел (IP/FQDN), с которого пользователь выполняет действия | Нет |
Отслеживаемые события
- Команды DDL:
CREATE TABLE
,DROP TABLE
,ALTER TABLE
,TRUNCATE TABLE
,CREATE DATABASE
,DROP DATABASE
,ALTER DATABASE
. - Попытки подключения клиентов.