1. 程式人生 > >Oracle 基於值審計

Oracle 基於值審計

Value-Based Auditing:基於值的審計

 

進行資料庫審計時會記錄審計物件中發生的插入、更新和刪除操作,但是不會捕獲更改的實際值。

要擴充套件資料庫審計,可使用基於值的審計,利用資料庫觸發器(事件驅動的PL/SQL 構造)來捕獲更改的值。

使用者在相應觸發器的表中插入、更新或刪除資料時,觸發器在後臺將審計資訊複製到包含審計資訊的表中。

因為審計觸發器程式碼在每次插入、更新或刪除操作發生時都必須執行,所以與標準資料庫審計相比,使用基於值的審計時,效能下降幅度比較大。

 

效能下降幅度取決於觸發器程式碼的效率。只在標準資料庫審計捕獲的資訊不足的情況下,才使用基於值的審計。

基於值的審計由使用者或第三方程式碼實施。Oracle DB 提供了可用來構建基於值的審計系統的PL/SQL 構造。

基於值的審計的關鍵部分是審計觸發器,這是一個單純為了捕獲審計資訊而構造的PL/SQL 觸發器。

 

以下是一個審計觸發器的典型示例:

[email protected]> drop table hr.e purge;
[email protected]> create table hr.e as select * from hr.employees;
[email protected]> create table log_aud ( uname varchar2(20),udate date,empid number,oldsal number,newsal number);

[email protected]> create or replace trigger tri_emp_sal
2 after update of salary
3 on hr.e
4 for each row
5 declare
6 pragma autonomous_transaction;
7 begin
8 if :new.salary > 5000 then
9 insert into log_aud
10 values(sys_context('userenv','current_user'),sysdate,:old.employee_id,:old.salary,:new.salary);
11 end if;
12 commit;
13* end;
/

[email protected]
> update hr.e set salary=6000 where employee_id=200;

[email protected]> select * from log_aud;

UNAME UDATE EMPID OLDSAL NEWSAL
-------------------- ---------------- ---------- ---------- ----------
SYS 27-APR-16 200 4401 6000