Oracle基於值的稽核

llnnmc發表於2017-09-21

Oracle透過使用觸發器,可以實現基於值的稽核。


基於值的稽核實驗:


1、使用者scott有一張員工表emp,其中欄位sal記錄了每位員工的工資資訊


2、建立一個稽核表用來記錄稽核結果

create table scott.emp_sal_audit

  (host varchar2(50), ip_address varchar2(20), emp_no varchar2(20), old_value number, new_value number, update_time date);


3、為表scott.emp建立一個觸發器,對欄位sal的值的更新應用觸發,記錄更新前後值,並記錄執行更新的客戶端資訊

create or replace trigger sal_audit

after update of sal on scott.emp

for each row

  begin

    if :old.sal != :new.sal then

      insert into scott.emp_sal_audit values

      (sys_context('userenv', 'host'),

        sys_context('userenv', 'ip_address'),

        :new.empno,

        :old.sal,

        :new.sal,

        sysdate);

    end if;

  end;


4、查詢當前記錄,並執行更新

select * from emp where empno = 7369;


EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO

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

 7369 SMITH      CLERK      7902 1980/12/17     800.00               20


update emp set sal = 900 where empno = 7369;

commit;


5、檢視稽核記錄

select * from emp_sal_audit;


HOST                 IP_ADDRESS           EMP_NO     OLD_VALUE  NEW_VALUE  UPDATE_TIME

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

WORKGROUP\MYPC       192.168.133.1        7369              800        900 2015/9/3 16:34:27


該表記錄了執行變更的客戶端機器、IP地址、更新前後值、更新時間等,觸發器中使用了oracle函式sys_context用來獲取系統環境資訊。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28974745/viewspace-2145265/,如需轉載,請註明出處,否則將追究法律責任。

相關文章