Навигация:  АДМИНИСТРИРОВАНИЕ МИС МЕДИАЛОГ > ПОЛЬЗОВАТЕЛИ СИСТЕМЫ И ПРАВА ДОСТУПА >

Протоколирование изменений

Предыдущая страницаВернуться в начало главыСледующая страница

В каждой таблице системы МЕДИАЛОГ имеются поля, в которых фиксируется пользователь, создавший записи и дата создания, а также пользователь, последний изменивший запись и дата последнего изменения записи. Это соответственно поля KRN_CREATE_USER_ID, KRN_CREATE_DATE, KRN_MODIFY_USER_ID и KRN_MODIFY_DATE. В качестве пользователя в этих полях фиксируется ID пользователя (MEDECINS_ID).

Кроме того, в системе поддерживается протоколирование редактирования и удаления данных в таблицах. Для этого в меню Настройка / Список пользователей и права доступа в разделе Протоколирование изменений необходимо отметить таблицы, которые будут протоколироваться (рис. 10.26).

Протоколирование изменений в таблицах без первичного ключа или с нецелочисленым первичным ключом недоступно.

 Рисунок 10.26. Протоколирование изменений: выбор таблиц


Рисунок 10.26. Протоколирование изменений: выбор таблиц

В таблицах KRN_SYS_TRACE и KRN_SYS_TRACE_LOG при каждом изменении протоколируемых таблиц будут появляться соответствующие сведения о пользователе, сделавшем изменение в протоколируемой таблице, дате и времени изменения, типе действия, прежнем и новом значении измененного поля в таблице.

В таблице KRN_SYS_TRACE можно увидеть следующее:

TABLE_NAME – внутреннее имя таблицы, в которой было сделано изменение (удаление).

REC_ID – ID записи, в которой было сделано изменение (удаление)

USER_ID – логин пользователя, сделавшего изменение (ID SQL-логина).

DATE_CHANGE – дата изменения (удаления) записи.

ACTION – тип действия, u – update (изменение), d – delete (удаление).

В таблице KRN_SYS_TRACE_LOG в поле USER_ID вместо ID SQL-логина прописывается ID пользователя в системе МЕДИАЛОГ (MEDESINS_ID). Помимо вышеперечисленных полей в данной таблице присутствует поле LOG, в котором в текстовом виде собрана вся информация о модификации записи.

В таблице KRN_SYS_DELETE_TRACE фиксируется информация об удаленных записях:

TABLE_NAME – имя таблицы, из которой удалена запись.

REC_ID – ID удаленной записи.

DBUSER_ID

EXTERNAL_USER_ID – пользователь, удаливший запись.

DATE_DELETE – дата удаления.

HOST_NAME – имя компьютера, с которого произведено удаление.

Пример лога из таблицы KRN_SYS_TRACE_LOG для действия UPDATE:

UserID = 68 DateTime = 24/01/2004 10:38:15 Action = UPDATE
PATIENT_ARRIVEE_OLD = False PATIENT_ARRIVEE_NEW = True
MODIFY_DATE_TIME_OLD = MODIFY_DATE_TIME_NEW = 24/01/2004 10:34:32 MEDECINS_MODIFY_ID_OLD = MEDECINS_MODIFY_ID_NEW = 1369

Из вышеприведенного лога можно увидеть, что пользователем с номером логина 68 24/01/2004 в 10:38:15 была произведена модификация строки № 126459 в таблице PLANNING (Записи в расписании). При этом были сделаны следующие изменения: поле PATIENT_ARRIVEE (Пациент пришел) изменено с положения false на true, поле MODIFY_DATE_TIME (дата и время редактирования записи) изменилось на 24/01/2004 10:34:32, а поле MEDECINS_MODIFY_ID (Пользователь, изменивший запись) изменилось на значение 1369.

Пример лога из таблицы KRN_SYS_TRACE_LOG для действия DELETE:

UserID=15 DateTime=20/01/2004 14:46:38 Action=DELETE PLANNING_ID=129502 PL_SUBJ_ID=1343 DATE_CONS=05/01/2004 HEURE=1430 DUREE=30
PATIENTS_ID=140620 NOM=ИВАНОВА PRENOM=Наталья MOTIF=""
COMMENTAIRE= COLOR=65535 FONT=-2147483640 DUREE_TEXT=3

В этом случае пользователем с номером логина 15 20/01/2004 в 14:46:38 было удалена запись пациента «ИВАНОВА Наталья» с PATIENTS_ID=140620. Запись была в расписании с ID= 1343 на 05/01/2004 в 14:30 продолжительностью 30 минут.

Просматривать протокол изменений можно с помощью утилиты SQL Query Analyzer. Узнать ID пользователей SQL-сервера поможет процедура sp_helpuser, которая выполняется в SQL Query Analyzer.

Пример скрипта для поиска записей по таблице KRN_SYS_TRACE_LOG:

SELECT * FROM KRN_SYS_TRACE_LOG

WHERE TABLE_NAME='PLANNING'

AND DATE_CHANGE BETWEEN '2004-01-19 08:00' AND '2004-01-20 20:00'

AND ACTION = 'D'

Этот скрипт позволяет найти все удаленные записи из таблицы PLANNING за период между 2004-01-19 08:00 и 2004-01-20 20:00.

Очистка лога

Следующий скрипт используется для очистки таблиц протоколирования

declare @NumDays int

/**********************************************************/

/*установка  числа дней от текущей даты до даты, по которую будут удаляться записи */

set @NumDays = 100

/**********************************************************/

alter table KRN_SYS_TRACE_LOG DISABLE TRIGGER ALL

alter table KRN_SYS_TRACE DISABLE TRIGGER ALL

alter table KRN_SYS_DELETE_TRACE DISABLE TRIGGER ALL

 

delete from KRN_SYS_TRACE_LOG where DateDiff(d,DATE_CHANGE,GetDate())>= @NumDays

delete from KRN_SYS_TRACE where DateDiff(d,DATE_CHANGE,GetDate()) >= @NumDays

delete from KRN_SYS_DELETE_TRACE where DateDiff(d,DATE_DELETE,GetDate())>=@NumDays

 

alter table KRN_SYS_TRACE_LOG ENABLE TRIGGER ALL

alter table KRN_SYS_TRACE ENABLE TRIGGER ALL

alter table KRN_SYS_DELETE_TRACE ENABLE TRIGGER ALL