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

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

Работа 16

КОНТРОЛЬ ДЕТАЛЬНОГО АУДИТА ДЕЙСТВИЙ ПОЛЬЗОВАТЕЛЕЙ В СУБД ORACLE

Цель: получение практических навыков работы с методами контроля подсистем систем аудита (регистрации и учета действий пользователей) СУБД Oracle.

ПЛАН ПРОВЕДЕНИЯ РАБОТЫ

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

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

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

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

1. Выбор предметной области и пользователей для проверки FGAudit

В качестве предметной области будем использовать предметную область пользователя «scott» (присутствует в поставке Oracle, т.е. скрипты для нее не требуются), так как в ней есть таблица «emp», в которой представлены личные сведения о сотрудниках фирмы. Защита личных сведений – понятная цель для задействования и демонстрации возможностей детального аудита. Лабораторная работа выполняется копированием и выполнением нижеприводимых команд в окно SQL*Plus. Посмотрим содержимое таблицы

«emp»:

conn scott/scott@orcl SELECT * FROM emp;

411

EMPNO

ENAME

JOB

MGR

HIREDATE

SAL

COMM

DEPTNO

-----------

----------

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

--------

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

------

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

7839

KING

PRESIDENT

 

17.11.81

5000

 

10

7698

BLAKE

MANAGER

7839

01.05.81

2850

 

30

7782

CLARK

MANAGER

7839

09.06.81

2450

 

10

7566

JONES

MANAGER

7839

02.04.81

2975

 

20

7902

FORD

ANALYST

7566

03.12.81

3000

 

20

7788

SCOTT

ANALYST

7566

19.04.87

3000

 

20

7369

SMITH

CLERK

7902

17.12.80

800

 

20

7499

ALLEN

SALESMAN

7698

20.02.81

1600

300

30

7521

WARD

SALESMAN

7698

22.02.81

1250

500

30

7654

MARTIN

SALESMAN

7698

28.09.81

1250

1400

30

7844

TURNER

SALESMAN

7698

08.09.81

1500

0

30

7876

ADAMS

CLERK

7788

23.05.87

1100

 

20

7900

JAMES

CLERK

7698

03.12.81

950

 

30

7934

MILLER

CLERK

7782

23.01.82

1300

 

10

Мы могли бы установить аудит на все действия с этой таблицей (с сохранением текста DML предложений) обычными средствами аудита, но при этом в таблице или в файле аудита будет накапливаться много лишней информации. Можно было бы, как мы делали это в предыдущей лабораторной работе, создать триггер регистрации действий с таблицей «emp» в специальной таблице аудита. Но триггер не работает на «SELECT».

Для создания политики аудита создадим пользователя «main» и наделим его соотвтетствующими привилегиями:

Conn sys/sys@orcl as sysdba

GRANT SELECT,INSERT,UPDATE,DELETE ON scott.emp TO PUBLIC;

DROP USER main CASCADE;

CREATE USER main IDENTIFIED BY main DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp

QUOTA 1m ON users;

GRANT connect, resource TO main; GRANT execute ON dbms_fga TO main;

GRANT select ON dba_fga_audit_trail TO main; GRANT DELETE on dba_fga_audit_trail to main; GRANT select ON dba_audit_policies TO main; GRANT FLASHBACK ANY TABLE TO main;

412

GRANT EXECUTE ON dbms_flashback TO main; Conn main/main@orcl

Удалим политику аудита, созданную предыдущим выполнением лабораторной работы:

DELETE FROM dba_fga_audit_trail; begin

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

/

Создадим политику аудита таблицы «emp», предусматривающую регистрацию DML действий пользователей (команды «select», «insert», «update», «delete») с этой таблицей таких, которые затрагивают столбец «ename» и включают условие «'sal > 1500'».

BEGIN DBMS_FGA.ADD_POLICY( OBJECT_SCHEMA => 'SCOTT', OBJECT_NAME => 'EMP', POLICY_NAME => 'chk_empa',

AUDIT_CONDITION => 'sal > 1500', AUDIT_COLUMN => 'ename', HANDLER_SCHEMA=>null, HANDLER_MODULE=>null, ENABLE=>true);

END;

/

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

--команда 1

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

SELECT empno,ename FROM scott.emp; --команда 3

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

UPDATE scott.emp SET deptno=40 WHERE deptno=20;

413

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:02:32:10

KING

SELECT empno, ename FROM scott.emp 2010-май-29:02:32:10

Команда 3 не зарегистрирована, так как команда 3 не затрагивает запросом столбцы, указанные в политике «chk_empa». Команда 4 не зарегистрирована, так как параметр «statement_types» политики по умолчанию имеет значение «SELECT». Скорректируем политику для учета действий с таблицей «emp» командами «INSERT, UPDATE, DELETE». Добавим условие, по которому аудит выпоняется и для столбца «sal». Так как программы UPDATE_POLICY не существует, сначала:

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

ENABLE=>true);

414

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

 

 

415