Аудит в MIS3 — различия между версиями
Материал из ИбисоПедии
Admin (обсуждение | вклад) |
|||
| (не показано 17 промежуточных версий 4 участников) | |||
| Строка 1: | Строка 1: | ||
| + | Внимание аудит данных изменился и стал как в КИС | ||
| + | |||
| + | см [[АУДИТ в KIS]] | ||
| + | |||
Существуют следующие виды аудита | Существуют следующие виды аудита | ||
* Аудит изменения данных | * Аудит изменения данных | ||
| Строка 4: | Строка 8: | ||
== Аудит изменения данных == | == Аудит изменения данных == | ||
| − | # Аудит данных осуществляется посредством | + | # Аудит данных осуществляется посредством триггеров на таблицы |
# Триггеры имеют название: audit_trigger% | # Триггеры имеют название: audit_trigger% | ||
# Данные аудита хранятся в схеме audit | # Данные аудита хранятся в схеме audit | ||
| Строка 13: | Строка 17: | ||
# Хранилище к которому относится аудит конкретной таблицы можно получить из таблицы audit.table_conf. Эта таблица должна быть одинаковой на всех БД | # Хранилище к которому относится аудит конкретной таблицы можно получить из таблицы audit.table_conf. Эта таблица должна быть одинаковой на всех БД | ||
| − | === Включение | + | === Включение аудита === |
* SELECT audit.audit_table('mm.naz'); | * SELECT audit.audit_table('mm.naz'); | ||
* в хранилище справочников: SELECT audit.audit_table_dict(''); | * в хранилище справочников: 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 ; | ||
| + | |||
| + | == Просмотр == | ||
| + | Ниже примеры: | ||
| + | |||
| + | <source> | ||
| + | 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> | ||
| + | |||
| + | <source> | ||
| + | -- все снятые подписи | ||
| + | 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' | ||
| + | |||
| + | </source> | ||
| + | |||
| + | -- Изменение по определенной ИБ | ||
| + | <source> | ||
| + | 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 | ||
| + | |||
| + | </source> | ||
| + | |||
| + | === Просмотр истории изменения из форм наследников 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' | ||
| + | |||
== Аудит входа / выхода == | == Аудит входа / выхода == | ||
| Строка 36: | Строка 124: | ||
Просмотреть можно на закладке Аудит, журнал входов/ выходов. Импорт данных работает только под SOFTMASTER | Просмотреть можно на закладке Аудит, журнал входов/ выходов. Импорт данных работает только под SOFTMASTER | ||
| + | {{warning}} Папку с логами нужно периодически чистить. | ||
[[Категория:Руководство программиста MIS3]] | [[Категория:Руководство программиста MIS3]] | ||
Текущая версия на 08:39, 20 января 2025
Внимание аудит данных изменился и стал как в КИС
см АУДИТ в KIS
Существуют следующие виды аудита
- Аудит изменения данных
- аудит входа/выхода
Содержание
Аудит изменения данных
- Аудит данных осуществляется посредством триггеров на таблицы
- Триггеры имеют название: 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'-- все снятые подписи
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
Внимание: Папку с логами нужно периодически чистить.