Oracle通过使用触发器,可以实现基于值的审核。
基于值的审核实验:
1、用户scott有一张员工表emp,其中字段sal记录了每位员工的工资信息
2、创建一个审核表用来记录审核结果
create table
scott.emp_sal_audit
(hostvarchar2(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;
HOSTIP_ADDRESS
EMP_NO OLD_VALUE NEW_VALUEUPDATE_TIME
--------------------
-------------------- ---------- ---------- ---------- --------------------
WORKGROUP\MYPC 192.168.133.1 7369 800 900 2015/9/3 16:34:27
该表记录了执行变更的客户端机器、IP地址、更新前后值、更新时间等,触发器中使用了oracle函数sys_context用来获取系统环境信息。