Аудит в MIS3 — различия между версиями

Материал из ИбисоПедии
Перейти к: навигация, поиск
(Аудит изменения данных)
 
(не показано 9 промежуточных версий этого же участника)
Строка 1: Строка 1:
 +
Внимание аудит данных изменился и стал как в КИС
 +
 +
см [[АУДИТ в KIS]]
 +
 
Существуют следующие виды аудита
 
Существуют следующие виды аудита
 
* Аудит изменения данных
 
* Аудит изменения данных
Строка 4: Строка 8:
  
 
== Аудит изменения данных ==
 
== Аудит изменения данных ==
# Аудит данных осуществляется посредством триггров на таблицы
+
# Аудит данных осуществляется посредством триггеров на таблицы
 
# Триггеры имеют название: audit_trigger%
 
# Триггеры имеют название: audit_trigger%
 
# Данные аудита хранятся в схеме audit
 
# Данные аудита хранятся в схеме audit
Строка 21: Строка 25:
 
=== Выключение аудита ===
 
=== Выключение аудита ===
  
<source lang="sql">
+
 
 
DROP TRIGGER if exists audit_trigger_row ON &table_name ;
 
DROP TRIGGER if exists audit_trigger_row ON &table_name ;
 
DROP TRIGGER if exists audit_trigger_stm ON &table_name ;
 
DROP TRIGGER if exists audit_trigger_stm ON &table_name ;
</source>
 
  
 
== Просмотр ==
 
== Просмотр ==
 +
Ниже примеры:
  
<source lang="sql">
+
<source>
 
SELECT a.action_tstamp_tx,
 
SELECT a.action_tstamp_tx,
 
       a.table_name,
 
       a.table_name,
Строка 41: Строка 45:
 
       schema_name = 'mm'  and
 
       schema_name = 'mm'  and
 
       a.row_data -> 'naz_id' = '8204'
 
       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>
 
</source>
  
Строка 51: Строка 94:
 
# Заполнить запись в таблице mm.entity (Справочники -> система и пользователи -> Сущности). Прописать два SQL-запроса для просмотра аудита.
 
# Заполнить запись в таблице mm.entity (Справочники -> система и пользователи -> Сущности). Прописать два SQL-запроса для просмотра аудита.
 
# В форме WOT установить соответствующее свойство  EntityName, например EntityName := 'ambticket';
 
# В форме 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'
 +
  
 
== Аудит входа / выхода ==
 
== Аудит входа / выхода ==

Текущая версия на 08:39, 20 января 2025

Внимание аудит данных изменился и стал как в КИС

см АУДИТ в KIS

Существуют следующие виды аудита

  • Аудит изменения данных
  • аудит входа/выхода

Аудит изменения данных

  1. Аудит данных осуществляется посредством триггеров на таблицы
  2. Триггеры имеют название: audit_trigger%
  3. Данные аудита хранятся в схеме audit
  4. Пока Существуют два хранилища аудита:
  • audit.logged_action_dict - справочники
  • audit.logged_action - все остальное
  1. Хранилище к которому относится аудит конкретной таблицы можно получить из таблицы 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"

Для этого необходимо:

  1. Заполнить запись в таблице mm.entity (Справочники -> система и пользователи -> Сущности). Прописать два SQL-запроса для просмотра аудита.
  2. В форме 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

Warning Внимание: Папку с логами нужно периодически чистить.