Аудит в MIS3
Существуют следующие виды аудита
- Аудит изменения данных
- аудит входа/выхода
Содержание
Аудит изменения данных
- Аудит данных осуществляется посредством триггров на таблицы
- Триггеры имеют название: audit_trigger%
- Данные аудита хранятся в схеме audit
- Пока Существуют два хранилища аудита:
- audit.logged_action_dict - справочники
- audit.logged_action - все остальное
- Хранилище к которому относится аудит конкретной таблицы можно получить из таблицы audit.table_conf. Эта таблица должна быть одинаковой на всех БД
Включение аудита
- SELECT audit.audit_table('mm.naz');
- в хранилище справочников: SELECT audit.audit_table_dict();
- пример с исключающими столбцами select audit.audit_table('mm.naz_text', true, true, '{"textb"}' )
Выключение аудита
DROP TRIGGER if exists audit_trigger_row ON &table_name ; DROP TRIGGER if exists audit_trigger_stm ON &table_name ;
Просмотр
Ниже примеры:
SELECT a.action_tstamp_tx,
a.table_name,
a.session_user_name,
a.client_addr,
a.client_query,
a.action,
a.row_data,
a.changed_fields
FROM audit.logged_actions a
where a.table_name = 'naz_text' and
schema_name = 'mm' and
a.row_data -> 'naz_id' = '8204'<source lang="sql"> -- все снятые подписи SELECT a.action_tstamp_tx,
a.TABLE_NAME,
a.session_user_name,
a.client_addr,
a.client_query,
a.action,
a.row_data,
a.changed_fields
FROM audit.logged_actions a
WHERE a.TABLE_NAME = 'naz' AND
schema_name = 'mm'
AND a.action_tstamp_tx >= current_date - interval '100 day'
and a.row_data -> 'naz_state_id' in ('1', '6','7','8','9')
and a.changed_fields -> 'naz_state_id' = '2'
-- Изменение по определенной ИБ select nd.name,naz_audit.* from
(SELECT
(populate_record(NULL::mm.naz, a.row_data)).*, a.action_tstamp_tx,
a.TABLE_NAME,
a.session_user_name,
a.client_addr,
a.client_query,
a.action,
a.row_data,
a.changed_fields
FROM audit.logged_actions a
WHERE a.TABLE_NAME = 'naz' AND
schema_name = 'mm'
AND a.row_data -> 'mdoc_id' ='6048') naz_audit left join mm.naz_dict nd on naz_audit.naz_dict_id = nd.id
Просмотр истории изменения из форм наследников TfmWinOnTask
Формы-наследники от TfmWinOnTask могут показывать аудит при нажатии на клавишу "Ctrl+Shift+H"
Для этого необходимо:
- Заполнить запись в таблице mm.entity (Справочники -> система и пользователи -> Сущности). Прописать два SQL-запроса для просмотра аудита.
- В форме WOT установить соответствующее свойство EntityName, например EntityName := 'ambticket';
Восстановление данных из аудита
select (populate_record(null::mm.ambticket, a.row_data)).* FROM audit.logged_actions a WHERE a.TABLE_NAME = 'ambticket'
AND schema_name = 'mm'
AND a.row_data -> 'mdoc_id' = '9992'
and a.action_tstamp_tx = '2016-02-08 13:56:39.021+03'
Аудит входа / выхода
Работает на основе логов postgresql. Для этого необходимо включить следующие настройки
log_timezone = 'Etc/GMT-3'
log_destination = 'csvlog' log_directory = 'pg_log' # directory where log files are written, logging_collector = on log_connections = on log_disconnections = on log_duration = on #log_statement = 'all' log_statement = 'ddl' # none, ddl, mod, all lc_messages = 'English_English.1251' # locale for system error message log_filename = 'postgresql-%Y-%m-%d.log' # log file name pattern,
Просмотреть можно на закладке Аудит, журнал входов/ выходов. Импорт данных работает только под SOFTMASTER
Внимание: Папку с логами нужно периодически чистить.