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

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

SELECT userid,ACTION#,OBJ$NAME FROM aud$;

USERID

ACTION#OBJ$NAME

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

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

LICNS_MGR

3

MANUFCTR

LICNS_MGR

3

MANUFCTR

Из таблицы словаря «audit_actions» мы найдем, что значению «3» столбца «ACTION#» соответствует команда «SELECT». В столбце «ses$actions» появляются значения при аудите таблицы «manufctr» только с опцией «BY SESSION» (устанавливаемой по умолчанию). Отметим здесь, что разным операциям с таблицей «manufctr» соответствуют символы в столбце «ses$actions» на разных позициях, значения этих символов также могут быть разными: «S» успешное выполнение команды, «F» неудачное выполнение команды, «B» сочетание успешного и неуспешного выполнения команды и др.

Убедимся в этом:

Connect sys/sys@orcl as sysdba

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

INSERT INTO manufctr VALUES(2,'ooooooo','iiiiiii','111111'); UPDATE manufctr SET manuid='3',name='eeee',address='wwwww' WHERE manuid=2;

UPDATE manufctr SET manuid='4',name='eeee',address='wwwww' WHERE manuid=3;

DELETE FROM manufctr WHERE manuid=4; Connect sys/sys@orcl as sysdba

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

USERID

SES$ACTIONS

OBJ$NAME

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

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

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

LICNS_MGR

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

MANUFCTR

При аудите с опцией «BY ACCESS» информация в столбце «ses$actions» не записывается. Но зато в столбце «action#» Фиксируются коды выполняемых команд, значение которых представлены в таблице словаря «audit_actions». Для регистрации выполняемых пользователем команд, а также действий пользователя по созданию других объектов схемы (например, триггеров, процедур) выполним следующие команды:

Connect sys/sys@orcl as sysdba

396

AUDIT select, insert, update, delete ON manufctr BY ACCESS; AUDIT procedure, trigger by ch_cert;

ALTER SYSTEM SET audit_trail= db,extended SCOPE=SPFILE;

Последняя команда включила расширенный аудит, при котором Фиксируются выполняемые пользователем, в отношении которого установлен аудит, DML команды, тексты создаваемых процедур, триггеров.

shutdown immediate startup

DELETE FROM aud$; connect ch_cert/ch_cert@orcl SELECT * FROM manufctr;

SELECT * FROM manufctr WHERE manuid=0; CREATE OR REPLACE PROCEDURE pr1 AS BEGIN

NULL;

END;

/

CREATE OR REPLACE TRIGGER tr1 BEFORE insert OR update ON item FOR EACH ROW

BEGIN

NULL;

END;

/

CREATE OR REPLACE TRIGGER tr2 BEFORE insert OR update ON item FOR EACH ROW

BEGIN

NULL

END;

/

Последний триггер создается с ошибкой, так как после команды

«NULL» нет знака «;».

DELETE PROCEDURE pr1; DELETE TRIGGER tr1; DELETE TRIGGER tr2; Connect sys/sys@orcl as sysdba

397

ALTER SESSION SET NLS_DATE_FORMAT='yyyy.mm.dd:hh:mi'; В столбце «extenden_timestamp» представления «dba_audit_ object», к которому мы будем обращаться, есть расширенный формат

даты, но с большими подробностями, чем нам сейчас требуется.

set linesize 300

 

 

SELECT user_name, audit_option,

success, failure FROM

dba_stmt_audit_opts;

 

 

USER_NAME

AUDIT_OPTION

SUCCESS FAILURE

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

CH_CERT

PROCEDURE

BY ACCESS BY ACCESS

CH_CERT

TRIGGER

BY ACCESS BY ACCESS

В столбцах «SUCCESS» и «FAILURE» после выполнения ко-

манды «AUDIT procedure, trigger by ch_cert;» установлены значе-

ния «BY ACCESS», что означает регистрацию каждого из поворяющихся действий пользователя «ch_cert» при создании процедур и триггеров, будь эти действия успешны или неуспешны. Опция «BY ACCESS» устанавливается для DDL команд по умолчанию. Отметим здесь также, что команда «AUDIT procedure, trigger by ch_cert;» задает аудит сразу нескольких вариантов DDL предложений, связанных с процедурами и триггерами (не только «CREATE»,

но и «DELETE», «ALTER TRIGGER …ENABLE (DISABLE)»).

SELECT username, timestamp, action_name, sql_text FROM dba_audit_object;

USERNAME TIMESTAMP ACTION_NAME SQL_TEXT

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

CH_CERT 2010.05.22:09:50 CREATE TRIGGER CREATE OR REPLACE TRIGGER tr2 BEFORE insert OR

update ON item FOR EACH ROW BEGIN

NULL

END;

CH_CERT 2010.05.22:09:49 CREATE TRIGGER CREATE OR REPLACE TRIGGER tr1 BEFORE insert OR

update

398

ON item

FOR EACH ROW

BEGIN

NULL;

END;

CH_CERT 2010.05.22:09:49 CREATE PROCEDURE CREATE OR

 

 

REPLACE

 

 

PROCEDURE pr1 AS

 

 

BEGIN

 

 

NULL;

 

 

END;

CH_CERT

2010.05.22:09:49 SELECT

SELECT * FROM manufctr

 

 

WHERE manuid=0

CH_CERT 2010.05.22:09:49 SELECT

SELECT * FROM manufctr

CH_CERT

2010.05.22:09:51

DROP TRIGGER

CH_CERT

2010.05.22:09:51

DROP TRIGGER

CH_CERT

2010.05.22:09:51

DROP PROCEDURE

Отключим аудит действий пользователя в схеме «ch_cert», а также – расширенный аудит:

Connect sys/sys@orcl as sysdba

NOAUDIT select, insert, update, delete ON manufctr; NOAUDIT procedure, trigger by ch_cert;

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

Startup

3. Общие настройки аудита для регистрации действий обычных и с привилегией «sysdba» пользователей

с базой данных

Действия пользователя «SYS» с привилегией «SYSDBA» не регистрируются в таблице словаря «AUD$». Для регистрации в системном журнале ОС всех действий этого пользователя установим параметр «audit_sys_operations» в значение «TRUE» и перестартуем инстанцию Oracle.

Connect sys/sys@orcl as sysdba

399

ALTER SYSTEM SET audit_sys_operations=true SCOPE=SPFILE; Shutdown immediate

Startup

DELETE FROM aud$;

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

SELECT 'audit ',name||';' FROM system_privilege_map;

Он выведет более полутора сотен строк – по всем системным привилегиям. При выполнении всех выведенных строк, как команд аудита (для этого надо скопировать выведенные предыдущим запросом строки и вставить в окно SQL*Plus, как выполняемые команды), они будут выполнены успешно, и в таблице

«dba_stmt_audit_opts» мы по запросу:

SELECT audit_option, success, failure FROM dba_stmt_audit_opts;

увидим включенный аудит практически по всем системным привилегиям. Не забудьте, затем выполнить запрос:

SELECT 'noaudit ',name||';' FROM system_privilege_map;

после которого скопировать все выведенные строки и выполнить их, как команды, отменяющие аудит.

На практике нет необходимости задействовать аудит в таком широком диапазоне. Мы проверим аудит действий всех пользователей по нескольким системным привилегиям:

AUDIT alter system, user,procedure, trigger, role;

Аудит таких общих (в команде аудита не указан конкретный пользователь) действий регистрируется для случая, когда параметр «audit_trail» установлен в значение «DB».

Для значения этого параметра «db,extended» аудит в таблице «aud$» не регистрируется.

Посмотрим, какие опции аудита у нас сейчас установлены:

SELECT audit_option, success, failure FROM dba_stmt_audit_opts;

AUDIT_OPTION

SUCCESS FAILURE

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

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

ALTER SYSTEM

BY ACCESS BY ACCESS

USER

BY ACCESS BY ACCESS

 

400