cd6e8416

Все типы DML-операторов


В сервере Oracle Database 10g средства FGA стали функционально полными – они позволяют выполнять аудит всех типов DML-операторов, а не только операторов SELECT.

Рассмотрим пример. В этой серии статей я использовал таблицу по имени ACCOUNTS (счета). Правило FGA (FGA policy), определенное для этой таблицы, было следующим: begin dbms_fga.add_policy ( object_schema => 'BANK', object_name => 'ACCOUNTS', policy_name => 'ACCOUNTS_ACCESS', audit_column => 'BALANCE', audit_condition => 'BALANCE >= 11000' ); end;

В сервере Oracle 9i Database это правило позволяло выполнять аудит только операторов SELECT. Однако в сервере Oracle Database 10g вы можете расширить список операторов, включив в него также операторы INSERT, UPDATE и DELETE. Это делается с помощью нового параметра:

statement_types => 'INSERT, UPDATE, DELETE, SELECT'

Этот параметр включает аудит всех типов операторов, перечисленных в нем. Вы можете также создавать отдельные правила для каждого типа операторов, что позволит вам по желанию включать или отключать правила; это удобно, в частности, для управления генерацией записей аудита с целью управления пространством, занятым ими. Однако по умолчанию параметр statement_type включает аудит только операторов SELECT.

После добавления правила с этим новым параметром при выполнении следующего оператора в таблице FGA_LOG$ появляется запись аудита, например:

update accounts set balance = 1200 where balance >= 3000;

Заметим, эта запись аудита вставляется в автономной транзакции, поэтому она останется в таблице даже после отката оператора UPDATE. Вы можете проверить наличие записи аудита из другого сеанса: select lsqltext from fga_log$; LSQLTEXT -------------------------------------------------------- update accounts set balance = 3100 where balance >= 3000

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



Содержание раздела