zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

Oracle 基于值审计

Oracle 基于 审计
2023-09-14 09:01:48 时间

Value-Based Auditing:基于值的审计

 

进行数据库审计时会记录审计对象中发生的插入、更新和删除操作,但是不会捕获更改的实际值。

要扩展数据库审计,可使用基于值的审计,利用数据库触发器(事件驱动的PL/SQL 构造)来捕获更改的值。

用户在相应触发器的表中插入、更新或删除数据时,触发器在后台将审计信息复制到包含审计信息的表中。

因为审计触发器代码在每次插入、更新或删除操作发生时都必须执行,所以与标准数据库审计相比,使用基于值的审计时,性能下降幅度比较大。

 

性能下降幅度取决于触发器代码的效率。只在标准数据库审计捕获的信息不足的情况下,才使用基于值的审计。

基于值的审计由用户或第三方代码实施。Oracle DB 提供了可用来构建基于值的审计系统的PL/SQL 构造。

基于值的审计的关键部分是审计触发器,这是一个单纯为了捕获审计信息而构造的PL/SQL 触发器。

 

以下是一个审计触发器的典型示例:

SYS@orcl> drop table hr.e purge;
SYS@orcl> create table hr.e as select * from hr.employees;
SYS@orcl> create table log_aud ( uname varchar2(20),udate date,empid number,oldsal number,newsal number);
SYS@orcl> 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;
/

SYS@orcl> update hr.e set salary=6000 where employee_id=200;

SYS@orcl> select * from log_aud;

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