699aa0a7

Столбцы аудита и условия аудита


Рассмотрим предыдущий пример более подробно. Мы потребовали, чтобы аудит выполнялся для любого оператора SELECT, используемого для запроса к таблице. В действительности в этом, вероятно, нет необходимости, и это может "завалить" данными таблицу аудита, в которой хранится информация аудита. Банк, возможно, должен выполнять аудит тогда, когда пользователь выбирает данные из столбца BALANCE (остаток на счете), которая содержит конфиденциальную информацию, но не должен выполнять аудит тогда, когда пользователь выбирает номер счета для конкретного клиента. Столбец BALANCE, выборка из которого инициирует событие аудита, называют столбцом аудита (audit column), и в этом случае параметр процедуры dbms_fga.add_policy задает это следующим образом:

audit_column => 'BALANCE'

Если в журнале аудита регистрируется каждая пользовательская выборка из таблицы, размер журнала будет расти, приводя к проблемам с пространством и администрированием, так что вы можете выполнять аудит только в случае удовлетворения определенным условиям, а не каждый раз. Возможно, банк нуждается в аудите только тогда, когда пользователи обращаются к счетам чрезвычайно богатых клиентов, например тогда, когда пользователь выбирает данные из счета с балансом, равным $11,000 и больше. Такой тип условия называют условием аудита (audit condition), и оно передается как параметр процедуры dbms_fga.add_policy следующим образом:

audit_condition => 'BALANCE >= 11000'

Посмотрим, как работают эти два параметра. Определение правила аудита теперь выглядит так: begin dbms_fga.add_policy ( object_schema=>'BANK', object_name=>'ACCOUNTS', policy_name=>'ACCOUNTS_ACCESS', audit_column => 'BALANCE', audit_condition => 'BALANCE >= 11000' ); end;

В этом случае аудит будет выполняться только тогда, когда пользователь выбирает данные из столбца BALANCE и извлеченные строки содержат баланс больший или равный $11,000. Если любое из этих условий не выполняется, действие не регистрируется в журнале аудита. Примеры в таблице 1 иллюстрируют различные сценарии: когда действия будут регистрироваться в журнале аудита и когда не будут.

Таблица 1. Различные сценарии, иллюстрирующие, выполняется или не выполняется аудит действий.



SQL-оператор Состояние аудита
select balance from accounts; Аудит выполняется. Пользователь выбирает данные из столбца аудита BALANCE, заданного при добавлении правила аудита.
select * from accounts; Аудит выполняется. Даже если пользователь явно не указывает столбец BALANCE, метасимвол "*" в списке выборки неявно задает его выборку.
select cust_id from accounts where balance < 10000; Аудит выполняется. Даже если пользователь явно не указывает столбец BALANCE, его выборка неявно задается в предложении WHERE.
select cust_id from accounts; Аудит не выполняется. Пользователь не выбирает данные из столбца BALANCE.
select count(*) from accounts; Аудит не выполняется. Пользователь явно или неявно не выбирает данные из столбца BALANCE.


Рассмотрим предыдущий пример более подробно. Мы потребовали, чтобы аудит выполнялся для любого оператора SELECT, используемого для запроса к таблице. В действительности в этом, вероятно, нет необходимости, и это может "завалить" данными таблицу аудита, в которой хранится информация аудита. Банк, возможно, должен выполнять аудит тогда, когда пользователь выбирает данные из столбца BALANCE (остаток на счете), которая содержит конфиденциальную информацию, но не должен выполнять аудит тогда, когда пользователь выбирает номер счета для конкретного клиента. Столбец BALANCE, выборка из которого инициирует событие аудита, называют столбцом аудита (audit column), и в этом случае параметр процедуры dbms_fga.add_policy задает это следующим образом:

audit_column => 'BALANCE'

Если в журнале аудита регистрируется каждая пользовательская выборка из таблицы, размер журнала будет расти, приводя к проблемам с пространством и администрированием, так что вы можете выполнять аудит только в случае удовлетворения определенным условиям, а не каждый раз. Возможно, банк нуждается в аудите только тогда, когда пользователи обращаются к счетам чрезвычайно богатых клиентов, например тогда, когда пользователь выбирает данные из счета с балансом, равным $11,000 и больше. Такой тип условия называют условием аудита (audit condition), и оно передается как параметр процедуры dbms_fga.add_policy следующим образом:

audit_condition => 'BALANCE >= 11000'

Посмотрим, как работают эти два параметра. Определение правила аудита теперь выглядит так: begin dbms_fga.add_policy ( object_schema=>'BANK', object_name=>'ACCOUNTS', policy_name=>'ACCOUNTS_ACCESS', audit_column => 'BALANCE', audit_condition => 'BALANCE >= 11000' ); end;

В этом случае аудит будет выполняться только тогда, когда пользователь выбирает данные из столбца BALANCE и извлеченные строки содержат баланс больший или равный $11,000. Если любое из этих условий не выполняется, действие не регистрируется в журнале аудита. Примеры в таблице 1 иллюстрируют различные сценарии: когда действия будут регистрироваться в журнале аудита и когда не будут.

Таблица 1. Различные сценарии, иллюстрирующие, выполняется или не выполняется аудит действий.

SQL-оператор Состояние аудита
select balance from accounts; Аудит выполняется. Пользователь выбирает данные из столбца аудита BALANCE, заданного при добавлении правила аудита.
select * from accounts; Аудит выполняется. Даже если пользователь явно не указывает столбец BALANCE, метасимвол "*" в списке выборки неявно задает его выборку.
select cust_id from accounts where balance < 10000; Аудит выполняется. Даже если пользователь явно не указывает столбец BALANCE, его выборка неявно задается в предложении WHERE.
select cust_id from accounts; Аудит не выполняется. Пользователь не выбирает данные из столбца BALANCE.
select count(*) from accounts; Аудит не выполняется. Пользователь явно или неявно не выбирает данные из столбца BALANCE.



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