Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторный практикум по НСД 2013

.pdf
Скачиваний:
66
Добавлен:
12.11.2022
Размер:
9.94 Mб
Скачать

361

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', HANDLER_SCHEMA=>null, HANDLER_MODULE=>null,

ENABLE=>true);

END;

/

DELETE FROM dba_fga_audit_trail;

Проверим, что зарегистрирует скорректированная политика FGA 'chk_empa'. conn king/king@orcl

--команда 1

SELECT * FROM scott.emp; conn smith/smith@orcl --команда 2

SELECT * FROM scott.emp; --команда 3

SELECT empno,job FROM scott.emp WHERE sal>1500; --команда 4

SELECT empno,job FROM scott.emp WHERE sal<1500; --команда 5

SELECT empno, deptno FROM scott.emp; --команда 6

SELECT ename FROM scott.emp; --команда 7

SELECT sal FROM scott.emp; --команда 8

UPDATE scott.emp SET sal=1600 WHERE sal<1500 AND job='CLERK'; ROLLBACK;

Посмотрим, что зарегистрировал аудит. conn main/main@orcl

Alter session set nls_date_format = 'yyyy-mon-dd:HH:MI:SS'; select db_user, sql_text, timestamp from dba_fga_audit_trail;

DB_USER

SQL_TEXT

TIMESTAMP

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

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

KING

SELECT * FROM scott.emp

2010-май-29:06:20:24

SMITH

SELECT * FROM scott.emp

2010-май-29:06:20:24

SMITH

SELECT empno,job FROM scott.emp

2010-май-29:06:20:25

 

WHERE sal>1500

 

SMITH

SELECT ename FROM scott.emp

2010-май-29:06:20:25

SMITH

SELECT sal FROM scott.emp

2010-май-29:06:20:25

362

SMITH UPDATE scott.emp SET sal=1600 2010-май-29:06:20:26 WHERE sal<1500 AND job='CLERK'

«UPDATE» пользователя «smits» зарегистрирован, несмотря на откат транзакции.

Извлечение только всех имен пользователей, а также в отдельном запросе только всех зарплат также регистрируется, так как эти столбцы указаны в политике и для отдельных строк таблицы с извлекаемыми значениями имен и зарплат выполняется условие sal>1500.

На самом деле извлечение по отдельности столбцов имен пользователей и зарплаты может не представлять особой угрозы безопасности, так как явной связи значений этих столбцов нет. Поэтому полезно было бы потребовать фиксировать обращение к таблице «emp» только если в запросе указаны оба столбца вместе. Такая возможность есть. В создаваемой политике FGAudit есть параметр «audit_column_opts» по умолчанию имеющий значение «dbms_fga.any_columns». Но если мы хотим потребовать фиксировать обращение к таблице «emp» только если в запросе указаны оба столбца вместе, этот пароаметр надо устанавливать в значение «dbms_fga.all_columns». Проверим настройку этого параметра с таким значением.

conn main/main@orcl 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, HANDLER_SCHEMA=>null, HANDLER_MODULE=>null,

ENABLE=>true);

END;

363

/

DELETE FROM dba_fga_audit_trail; conn smith/smith@orcl

--команда 1

SELECT ename FROM scott.emp; --команда 2

SELECT sal FROM scott.emp; --команда 3

SELECT ename, sal FROM scott.emp; conn main/main@orcl

Alter session set nls_date_format = 'yyyy-mon-dd:HH:MI:SS'; select db_user, sql_text, timestamp from dba_fga_audit_trail;

DB_USER

SQL_TEXT

TIMESTAMP

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

SMITH

SELECT ename, sal FROM scott.emp

2010-май-29:07:46:49

Наша политика сработала верно. Зарегистрирован только один запрос с извлечением одновременно двух столбцов. В представлении словаря «dba_audit_policies» можно увидеть созданную политику.

conn main/main@orcl

SELECT * FROM dba_audit_policies;

Проверка выполнения запросов, включающих переменные привязки, ретроспективных запросов, с использованием FGAudit

В предыдущем разделе был приведен пример политики FGAudit, в котором вводилось условие «sal>1500». Если в запросе в явном виде присутствует предикат, включающий это условие, запрос будет зарегистрирован детальным аудитом. Но ведь запрос может быть написан с использованием переменных привязки. Сможет ли детальный аудит зарегистрировать такие запросы? Да, такая возможность есть.

conn main/main@orcl

DELETE FROM dba_fga_audit_trail; Conn ford/ford@orcl

var empno number

var ename varchar2(10) begin

:empno:=7900;

:ename:='JAMES';

end;

/

select ename, sal from scott.emp where empno=:empno and ename=:ename;

ENAME SAL

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

364

JAMES 950

begin :empno:=7839; :ename:='KING'; end;

/

select ename, sal from scott.emp where empno=:empno and ename=:ename;

ENAME

SAL

----------

----------

KING

5000

conn main/main@orcl

Alter session set nls_date_format = 'yyyy-mon-dd:HH:MI:SS'; col sql_bind format a30

col sql_text format a100

select db_user, sql_text, sql_bind, timestamp from dba_fga_audit_trail;

DB_USER SQL_TEXT

SQL_BIND

TIMESTAMP

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

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

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

FORD select ename, sal from scott.emp

#1(4):7839 #2(4):KING 2010-май-30:01:10:12

where empno=:empno

and ename=:ename

Запрос с ename=JAMES не зарегистрирован, так как зарплата JAMES-а < 1500, запрос с FORD-ом зарегистрирован, так как выполняется условие «sal>1500». Детальный аудит в столбце «sql_bind» зафиксировал обе переменные привязки и их значения. В столбце «sql_bind» #1 означает первую переменную привязки, #2 – вторую, (4) число символов в переменной привязки, а затем приводится само значение переменной привязки.

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

При создании политики детального аудита возможность регистрировать переменные привязки, как и текст запроса, определяется параметром «audit_trail» процедуры «dbms_fga.add_policy», который по умолчанию имеет значение «db_extended». Для отключения возможности регистрировать переменные привязки этот параметр надо установить в значение «dbms_fga.db».

conn main/main@orcl begin

DBMS_FGA.DROP_POLICY( OBJECT_SCHEMA => ‘scott’, OBJECT_NAME => ‘emp’, policy_name => ‘CHK_EMPA’); end;

365

/

Затем:

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, HANDLER_SCHEMA=>null, HANDLER_MODULE=>null,

ENABLE=>true);

END;

/

При анализе данных детального аудита бывает полезно не только видеть запрос, выданный пользователем, но и извлеченное им значение по этому запросу. Момент анализа данных детального аудита во времени может отстоять на несколько дней от момента, когда был сделан зафиксированный детальным аудитом запрос. За эти несколько дней содержимое таблицы, к которой был сделан этот запрос, изменилось, поэтому неясно, что же именно увидел потенциальный нарушитель, выполнивший свой запрос.

Установим параметр AUDIT_TRAIL политики детального аудита в значе-

ние «dbms_fga.db_extended».

Conn main/main@orcl begin

DBMS_FGA.DROP_POLICY( OBJECT_SCHEMA => ‘scott’, OBJECT_NAME => ‘emp’, policy_name => ‘CHK_EMPA’); end;

/

Затем: begin

DBMS_FGA.DROP_POLICY( OBJECT_SCHEMA => ‘scott’, OBJECT_NAME => ‘emp’, policy_name => ‘CHK_EMPA’); end;

/

BEGIN DBMS_FGA.ADD_POLICY(

366

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, 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

367

Остальные строки, кроме KING-а нам неинтересны, ведь изменялось значение только в этой строке.

Для того чтобы пользователь «main» мог выполнять такое извлечение прошлого состояния строки, ему была дана привилегия «FLASHBACK ANY

TABLE».

Определение политики (правила) аудита с обработкой событий для выбранной предметной области. Проверка выполнения детального аудита с обработкой событий в соответствии с определенной политикой

В предыдущих разделах этой лабораторной работы мы в числе параметров процедуры 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),

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,

 

 

368

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');

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,

369

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,

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;

370

/

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, 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 можно выполнять любую обработку, не затрагивая словаря базы данных.

Сдача лабораторной работы

Заключается в демонстрации студентом детального аудита на индивидуальной предметной области, заданной преподавателем. Студент сам создает и обеспечивает возможность демонстрации преподавателю (совокупностью скриптов) политики детального аудита в работе:

А) без обработки событий детального аудита; Б) с регистрацией переменных привязки и выводимой по зарегистрирован-

ному детальным аудитом запросу на момент выполнения этого запроса; В) с обработкой событий детального аудита.

В ходе выполнения скриптов студент отвечает на вопросы преподавателя в связи с их (скриптов) работой.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]