Горбатов Аттестационные испытания автоматизированных систем от 2014
.pdfAUDIT_COLUMN_OPTS => dbms_fga.all_columns, AUDIT_TRAIL => dbms_fga.db_extended, HANDLER_SCHEMA=>null, HANDLER_MODULE=>null,
ENABLE=>true);
END;
/
DELETE FROM dba_fga_audit_trail;
Выполним пользователем «FORD» запрос:
Conn ford/ford@orcl SELECT * FROM scott.emp;
Затем пользователем «MAIN» изменим значение столбца «sal».
Conn main/maint@orcl
Alter session set nls_date_format = ‘yyyy-mon-dd:HH:MI:SS’; col sql_text format a100
Update scott.emp set sal= 6000 where ename=’KING’; Commit;
Теперь, если извлекать строки таблицы «emp», в строке KING зарплата будет иметь значение «6000». А что видел FORD?
Выполним запрос к представлению «dba_fga_audit_trail», в котором выведем значение SCN (sytem change number – можно сказать, соответствует отсчету внутренних часов Oracle) для запроса
FORD:
select db_user, sql_text, timestamp,scn from dba_fga_audit_trail WHERE db_user=’FORD’;
DB_USER SQL_TEXT TIMESTAM SCN
---------- -------------------------------------- ---------------------- -----------
FORD SELECT*FROM scott.emp 2010-май-30:02:55:11 13705104
А теперь выполним команду, которая позволит просмотреть строки таблицы «emp» на момент с SCN=13705104, т.е. на тот момент, когда запрос делал FORD:
select * from scott.emp as of SCN 13705104; |
|
|
EMPNO ENAME |
JOB MGR HIREDATE SAL COMM DEPTNO |
|
---------- ---------- --------- |
---------- -------- ---------- ---------- ---------- |
|
7839 KING |
PRESIDENT 17.11.81 5000 |
10 |
|
421 |
|
Остальные строки, кроме KING-а нам неинтересны, ведь изменялось значение только в этой строке.
Для того чтобы пользователь «main» мог выполнять такое извлечение прошлого состояния строки, ему была дана привилегия
«FLASHBACK ANY TABLE».
3. Определение политики (правила) аудита с обработкой событий для выбранной предметной области.
Проверка выполнения детального аудита с обработкой событий в соответствии с определенной политикой
В предыдущих разделах этой лабораторной работы мы в числе параметров процедуры DBMS_FGA.ADD_POLICY указывали, но не задавали значения, параметры «HANDLER_SCHEM», «HANDLER_MODULE». Эти два параметра задают владельца модуля обработки данных детального аудита и название этого модуля. Создадим в схеме «main» таблицу (с незначительной корректировкой) и процедуру для обработки данных детального аудита по образцу, приведенному в книге «Oracle PL/SQL для администраторов баз данных» авторов Аруп Нанда и Стивен Фейерштейн, изданной издательством «Символ-Плюс» в 2008 году.
conn main/main@orcl
CREATE TABLE flagged_access
(
fgasid NUMBER(20), entryid NUMBER(20), audit_date DATE, fga_policy VARCHAR2(30), db_user VARCHAR(30), os_user VARCHAR2(30),
authent_type VARCHAR2(30), client_id VARCHAR2(100), client_info VARCHAR2(64), host_name VARCHAR2(54), instance_id NUMBER(2),
ip VARCHAR2(30), term VARCHAR2(30),
422
schema_owner VARCHAR2(20), table_name VARCHAR2(30), sql_text VARCHAR2(64),
SCN NUMBER(10) ) ;
create or replace procedure access_flagger
(
p_table_owner in varchar2, p_table_name in varchar2, p_fga_policy in varchar2
)
is
l_fgasid number(20); l_entryid number(20); l_term varchar2(2000); l_db_user varchar2(30); l_os_user varchar2(30);
l_authent_type varchar2(2000); l_client_id varchar2(100); l_client_info varchar2(64); l_host_name varchar2(30); l_instance_id number(2);
l_ip varchar2(30); l_sql_text varchar2(4000); l_scn number;
begin
l_fgasid := sys_context('USERENV','SESSIONID'); l_entryid := sys_context('USERENV','ENTRYID'); l_term := sys_context('USERENV','TERMINAL');
l_db_user := sys_context('USERENV','SESSION_USER'); l_os_user := sys_context('USERENV','OS_USER');
l_authent_type := sys_context('USERENV','AUTHENTICATION_TYPE' );
l_client_id := sys_context('USERENV','CLIENT_IDENTIFIER'); l_client_info := sys_context('USERENV','CLIENT_INFO'); l_host_name := sys_context('USERENV','HOST');
423
l_instance_id := sys_context('USERENV','INSTANCE'); l_ip := sys_context('USERENV','IP_ADDRESS'); l_sql_text := sys_context('USERENV','CURRENT_SQL'); l_scn := sys.dbms_flashback.get_system_change_number; insert into flagged_access
(
fgasid,
entryid, audit_date, fga_policy, db_user, os_user, authent_type, client_id, client_info, host_name, instance_id, ip,
term, schema_owner, table_name, sql_text,
scn
)
values
(
l_fgasid, l_entryid, sysdate, p_fga_policy, l_db_user, l_os_user, l_authent_type, l_client_id, l_client_info, l_host_name, l_instance_id, l_ip,
424
l_term, p_table_owner, p_table_name, l_sql_text, l_scn
);
end;
/
Обратим внимание на то, что в созданную нами таблицу аудита вставляется информация из системного контекста, идентифицирующая атрибуты клиента, выполнившего запрос, в том числе и такая, какой нет в представлении «dba_fga_audit_trail». Для того чтобы использовать обработчик в приведенном варианте, пользователю «main» была дана привилегия, на основании которой при выполнении процедуры можно будет извлекать и записывать SCN
в таблицу flagged_access:
GRANT EXECUTE ON dbms_flashback TO main;
Пересоздадим политику:
begin DBMS_FGA.DROP_POLICY( OBJECT_SCHEMA => 'scott', OBJECT_NAME => 'emp', policy_name => 'CHK_EMPA'); end;
/
BEGIN DBMS_FGA.ADD_POLICY( OBJECT_SCHEMA => 'scott', OBJECT_NAME => 'emp', POLICY_NAME => 'chk_empa',
AUDIT_CONDITION => 'sal >1500', AUDIT_COLUMN => 'ename,sal', STATEMENT_TYPES => 'select, insert, update, delete', AUDIT_COLUMN_OPTS => dbms_fga.all_columns, AUDIT_TRAIL => dbms_fga.db_extended,
425
HANDLER_SCHEMA=>'main', HANDLER_MODULE=>'access_flagger', ENABLE=>true);
END;
/
col sql_text format a100
Alter session set nls_date_format = 'yyyy-mon-dd:HH:MI:SS'; select db_user, sql_text, timestamp,scn from dba_fga_audit_trail
WHERE db_user='SMITH';
DB_USER SQL_TEXT TIMESTAM SCN
-------------- -------------------------------------- ---------------------- -----------
SMITH SELECT*FROM scott.emp 2010-май-30:08:35:12 13731785 |
||
select db_user, sql_text, audit_date,scn from flagged_access |
||
WHERE db_user='SMITH'; |
|
|
DB_USER SQL_TEXT |
AUDIT_DATE |
SCN |
-------------- -------------------------------------- ---------------------- -----------
SMITH SELECT*FROM scott.emp 2010-май-30:08:35:12 13731785
C данными аудита в таблице flagged_access можно выполнять любую обработку, не затрагивая словаря базы данных.
Сдача лабораторной работы
Заключается в демонстрации студентом детального аудита на индивидуальной предметной области, заданной преподавателем. Студент сам создает и обеспечивает возможность демонстрации преподавателю (совокупностью скриптов) политики детального аудита в работе:
А) без обработки событий детального аудита; Б) с регистрацией переменных привязки и выводимой по заре-
гистрированному детальным аудитом запросу на момент выполнения этого запроса;
В) с обработкой событий детального аудита.
В ходе выполнения скриптов студент отвечает на вопросы преподавателя в связи с их (скриптов) работой.
426
Тестовые задания к работе 16
Входной контроль
1.Укажите недостатки аудита (средствами разработчика)
команды «select»:
a)команды «select» не ко всем таблицам могут быть зарегистрированы этим аудитом;
b)команды «select» не всех (помимо пользователя sys) могут быть зарегистрированы этим аудитом;
c)триггер, используемый для такого аудита, требует длительного времени для срабатывания на команду «select»;
d)триггер на команду «select» не может быть создан;
e)правильных ответов нет.
2.На каком пакете построена функциональность детального аудита?
a)DBMS_RLS;
b)DBMS_JOB;
c)DBMS_FGA;
d)DBMS_OUTPUT;
e)правильных ответов нет.
3.Какому пользователю принадлежит традиционный журнал аудита базы данных Oracle?
a)system;
b)sys;
c)sysaud;
d)dbsnmp;
e)правильных ответов нет.
4.В какой таблице хранится традиционный журнал аудита
Oracle?
a)user$;
b)association$;
c)aud$;
d)aw$;
e)правильных ответов нет.
5.Через какие представления доступна пользователю информация традиционного словаря данных?
a)dba_audit_trail;
427
b)dba_audit_session;
c)dba_audit_objects;
d)user_objects;
e)Правильных ответов нет.
6.В приведенном ниже перечне укажите строки, в которых указана причина, почему детальный аудит был создан (помимо стандартного) для администраторов баз данных:
a)повышение безопасности;
b)анализ выполнения SQL запросов;
c)эмуляция триггеров на select;
d)оптимизация производительности при использовании переменных связывания;
e)правильных ответов нет.
7.Для каких SQL операторов может выполняться детальный аудит?
a)insert;
b)update;
c)delete;
d)select;
e)правильных ответов нет.
Выходной контроль
1.Какие привилегии даются пользователю для того, чтобы он своими командами мог задействовать детальный аудит?
a) GRANT connect, resource TO main;
b) GRANT execute ON dbms_fga TO main;
c) GRANT select ON dba_fga_audit_trail TO main; d) GRANT FLASHBACK ANY TABLE TO main; e) GRANT EXECUTE ON dbms_flashback TO main; f) правильных ответов нет.
2.В какое значение необходимо установить параметр «AUDIT_TRAIL» политики детального аудита, чтобы посмотреть данные, извлекаемые зарегистрированным детальным аудитом запросом на момент этого запроса?
a) AUDIT_TRAIL => dbms_fga.db_extended; b) AUDIT_TRAIL => dbms_fga.extended;
c) AUDIT_TRAIL =>extended;
428
d)AUDIT_TRAIL =>db, extended;
e)AUDIT_TRAIL => dbms_fga.db, extended;
f)правильных ответов нет.
3.Запросом к представлению «dba_fga_audit_trail» найден для зарегистрированного аудитом к таблице «employee» пользователя «demo»SQL запроса SCN=13705104. Каким запросом можно посмотреть значение, извлекаемое из этой таблицы запросом с найденным SCN?
a)select spx.name from dba_audit_trail where SCN= 13705104;
b)select * from scott.emp as of SCN 13705104;
c)select action from dba_audit_session where SCN= 13705104;
d)select ses$action from aud$ where SCN= 13705104;
e)select * from scott.emp where SCN= 13705104;
f)правильных ответов нет.
4.Пользователю дается привилегия «GRANT EXECUTE ON dbms_flashback TO main;». Какую информацию может из-
влекать пользователь на основании этой привилегии?
a)запрос на определенный прошлый момент;
b)результат запроса на определенный прошлый момент;
c)SCN;
d)название политики детального аудита;
e)условие детального аудита;
f)правильных ответов нет.
5.Пользователю дается привилегия «GRANT FLASHBACK ANY TABLE TO main;» Какую информацию может извлекать пользователь на основании этой привилегии?
a)параметры политики детального аудита;
b)запросы к таблицам схемы пользователя;
c)результаты запросов на определенный момент в прошлом;
d)извлекать информацию из всех таблиц и представлений словаря, содержащих информацию аудита;
e)прошлое состояние строки таблицы в схеме пользователя;
f)правильных ответов нет.
6.Задана политика детального аудита:
BEGIN
DBMS_FGA.ADD_POLICY(
OBJECT_SCHEMA => 'scott',
OBJECT_NAME => 'emp',
429
POLICY_NAME => 'chk_empa', AUDIT_CONDITION => 'sal >1500', AUDIT_COLUMN => 'ename,sal', STATEMENT_TYPES => 'select, insert, update, delete', AUDIT_COLUMN_OPTS => dbms_fga.all_columns, HANDLER_SCHEMA=>null, HANDLER_MODULE=>null,
ENABLE=>true);
END;
/
Укажите в приведенном ниже перечне запросы пользователя к таблице «emp», которые будут зарегистрированы детальном аудитом:
a)SELECT ename FROM scott.emp;
b)SELECT sal FROM scott.emp;
c)SELECT ename, sal FROM scott.emp;
d)SELECT * FROM scott.emp;
e)SELECT * FROM scott.emp WHERE empno is NULL;
f)правильных ответов нет.
7. Какую информацию дает столбец «sql_bind» представле-
ния «dba_fga_audit_trail»?
a)текст SQL запроса с присоединенным к нему результатом;
b)порядковые в сеансе номера переменных привязки;
c)число символов в переменных привязки;
d)связанный с SQL запросом SCN, соответствующий этому запросу;
e)значения переменных привязки;
f)правильных ответов нет.
430