Материал: Горбатов Аттестационные испытания автоматизированных систем от 2014

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

391

Рис. 15.1 ERD диаграмма предметной области (English)

На схеме видно, что два пользователя: Certif_mgr и Licns_mgr имеют «общую» таблицу «Manufctr», с которой оба эти пользователя могут выполнять однотипные действия изменения данных в этой таблице. Для того чтобы знать, какой пользователь, какие действия по изменению данных выполнял, создадим таблицу manufactr_audit. В эту таблицу будем также заносить информацию о прежнем и новом значении строк таблицы manufctr, формируемых пользователями, имеющими право работы с ней.

Работа выполняется копированием нижеприводимых команд в окно SQL*Plus.

CREATE TABLE manufctr_audit ( CHANGE_TYPE CHAR(1) NOT NULL, CHANGED_BY VARCHAR2(10) NOT NULL, TIMESTAMP DATE NOT NULL, Old_ManuID NUMBER(5),

Old_Name VARCHAR2(25),

Old_Address VARCHAR2(35),

Old_Phone VARCHAR2(12),

New_ManuID NUMBER(5),

New_Name VARCHAR2(25),

New_Address VARCHAR2(35),

New_Phone VARCHAR2(12) );

Создадим синоним этой таблицы, чтобы к ней можно было обращаться без ввода имени схемы:

CREATE PUBLIC SYNONYM manufctr_audit FOR ch_cert.manufctr_audit;

Теперь создадим триггер, обеспечивающий занесение информации аудита в таблицу manufctr_audit:

CREATE OR REPLACE TRIGGER LogManufctr

BEFORE INSERT OR DELETE OR UPDATE ON Manufctr FOR EACH ROW

DECLARE v_ChangeType CHAR(1); BEGIN

IF INSERTING THEN v_ChangeType := 'I'; ELSIF UPDATING THEN

392

v_ChangeType := 'U'; ELSE

v_ChangeType := 'D'; END IF;

INSERT INTO Manufctr_audit (change_type, changed_by, timestamp,

old_manuid, old_name, old_address, old_phone, new_manuid, new_name, new_address, new_phone) VALUES

(v_ChangeType, USER, SYSDATE,

:old.manuid, :old.name, :old.address, :old.phone, :new.manuid, :new.name, :new.address, :new.phone); END LogManufctr;

/

Проверим выполнение аудита изменений в таблице manufctr_audit.

connect licns_mgr/licns_mgr@orcl

insert into manufctr values(3,'Наши друзья','Территория МИФИ','324-34-54');

update manufctr

set manuid=4, name='Их люди',address='Коломенское',phone='112-11-21'

where manuid=3;

delete from manufctr where manuid=4;

Так как привилегия просмотра таблицы «manufctr_audit» пользователям licns_mgr и certif_mgr не предоставлялась, просматривать таблицу manufctr_audit может ее «хозяин» ch_cert.

connect ch_cert/ch_cert@orcl select * from manufctr_audit;

C CHANGED_BY TIMESTAM OLD_MANUID OLD_NAME OLD_ADDRESS OLD_PHONE NEW_MANUID NEW_NAME NEW_ADDRESS NEW_PHONE

- ---------- -------- ---------- ------------------------- ----------------------------------- ------------ ---------- ------------

------------- ----------------------------------- ------------

 

 

I LICNS_MGR

21.05.10

 

3

Наши друзья

Территория МИФИ

324-34-54

 

 

 

U LICNS_MGR 21.05.10

 

3

Наши друзья

Территория МИФИ

324-34-54 4

Их люди Коломенское

112-11-21

 

D LICNS_MGR

21.05.10 4

Их люди Коломенское

112-11-21

 

393

Выводимая информация позволяет проконтролировать выполнение аудита действий пользователей и показывает, кто, когда, какие действия по изменению таблицы «manufctr» выполнял и, что особенно важно, прежние и новые значения изменяемых строк этой таблицы.

2. Настройка и проверка в работе аудита действий пользователя встроенными средствами аудита СУБД Oracle, аудит действий пользователя с привилегией «sysdba»

в СУБД Oracle

Регистрация действий пользователей с объектами. Для регистра-

ции таких действий надо задействовать аудит – установить инициализационный параметр audit_trail в значение «DB» или «TRUE».

Connect sys/sys@orcl as sysdba

Проверим значение этого параметра командой:

Show parameter audit_trail

Если значение параметра «TRUE» или «DB», для очистки таблицы аудита Oracle выполним команду:

delete from aud$;

Теперь мы освободились от записей аудита предыдущих сеансов и можем продолжать работу «с чистого листа».

Если значение параметра «NONE», установим этот параметр в значение «TRUE» или «DB» и перестартуем инстанцию:

ALTER SYSTEM SET audit_trail=db SCOPE=SPFILE; Shutdown immediate

Startup

Проверим еще раз значение параметра audit_trail:

Show parameter audit_trail

Теперь выполним команду, включающую аудит таблицы

«manufctr»:

AUDIT select,insert,update,delete ON manufctr;

Убедимся, что таблица «aud$», регистрирующая аудит, пуста:

SELECT userid,ses$actions,obj$name FROM aud$;

Если же в ней есть записи, удалим их:

DELETE FROM aud$;

И проверим, как выполняется аудит действий с таблицей

«manufctr»:

394

connect licns_mgr/licns_mgr@orcl SELECT * FROM manufctr;

Посмотрим, зарегистрирован ли этот «select»:

Connect sys/sys@orcl as sysdba

SELECT userid,ses$actions,obj$name FROM aud$;

USERID

SES$ACTIONS

OBJ$NAME

----------------

-------------------

----------------

LICNS_MGR

---------S-------

MANUFCTR

Знак «S» в столбце таблицы «aud$» говорит о том, что зареги-

стрирован успешный «SELECT» к этой таблице; отметим, что этот знак занимает седьмую позицию справа в этом столбце; проверим выполнение двух команд «select» к таблице «manufctr» в одном сеансе, предварительно очистив таблицу aud$:

delete from aud$;

connect licns_mgr/licns_mgr@orcl

SELECT * FROM manufctr WHERE manuid=0; SELECT * FROM manufctr WHERE manuid=1;

Посмотрим, как зарегистрированы эти «SELECT»:

Connect sys/sys@orcl as sysdba

SELECT userid,ses$actions,obj$name FROM aud$; USERID SES$ACTIONS OBJ$NAME

----------------- ------------------- ------ ----------

LICNS_MGR ---------S------ MANUFCTR

Отсутствие новых строк в таблице «aud$» говорит о том, что в ней регистрируется факт выполнения «SELECT» в сеансе, но не регистрируется каждая из этих команд. Это объясняется тем, что команда «AUDIT select, insert, update, delete ON manufctr;» по умолчанию выполняется с опцией «BY SESSION». Выполним теперь эту команду с опцией «BY ACCESS», предварительно очистив таблицу «aud$»:

Connect sys/sys@orcl as sysdba DELETE FROM aud$;

AUDIT select, insert, update, delete ON manufctr BY ACCESS; connect licns_mgr/licns_mgr@orcl

SELECT * FROM manufctr WHERE manuid=0; SELECT * FROM manufctr WHERE manuid=1; Connect sys/sys@orcl as sysdba

Немного изменим запрос к таблице «aud$»:

395