绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
【FGA】扩展Oracle细粒度审计功能——调用定制的存储过程
2019-12-29 22:01:13
Oracle的细粒度审计(FGA)可以调用定制的存储过程,这样可以非常方便地协助我们完成更多的任务,就该方法做一个简单展示。供参考。

1.创建待审计的表T及存储过程操作的监控表MON_T

1)创建表T并初始化两条记录
sec@ora10g> create table t (x int);

Table created.

sec@ora10g> insert into t values (1);

1 row created.

sec@ora10g> insert into t values (101);

1 row created.

sec@ora10g> commit;

Commit complete.

sec@ora10g> select * from t;

         X
----------
         1
       101

2)创建存储过程操作的监控表MON_T
sec@ora10g> create table mon_t (x date);

Table created.

2.创建待FGA调用的存储过程
CREATE OR REPLACE PROCEDURE proc_mon_t (schema_name    VARCHAR2,
                                        table_name     VARCHAR2,
                                        policy         VARCHAR2)
IS
BEGIN
   INSERT INTO mon_t
     VALUES   (SYSDATE);
END;
/

我们的目标是:当满足审计条件之后会向表mon_t中中插入一条时间记录,表明发生审计动作的时间。
注意上述存储过程的参数名。

3.定制FGA审计策略
BEGIN
   DBMS_FGA.ADD_POLICY (
            object_schema       => 'SEC',
            object_name         => 'T',
            policy_name         => 'audit_test',
            audit_condition     => 'X < 100',
            audit_column        => 'X',
            HANDLER_SCHEMA      => 'SEC',
            HANDLER_MODULE      => 'PROC_MON_T',
            enable              => TRUE,
            statement_*     => 'DELETE',
            audit_trail         => DBMS_FGA.XML + DBMS_FGA.EXTENDED,
            audit_column_opts   => DBMS_FGA.ANY_COLUMNS);
END;
/

该策略对T表满足X<100条件的删除动作进行审计。
这里重点关注的参数是HANDLER_MODULE,使用该参数可以实现调用存储过程的目的。

BTW:删除该FGA审计策略的方法如下。
exec DBMS_FGA.DROP_POLICY ( object_schema => 'SEC', object_name => 'T', policy_name => 'audit_test');

4.测试审计效果
1)删除满足x < 100条件的记录的测试
sec@ora10g> delete from t where x = 1;

1 row deleted.

sec@ora10g> select sql_text from V$XML_AUDIT_TRAIL;

SQL_TEXT
---------------------------------------------------------------------
delete from t where x = 1

此时已经可以查看到具体的审计信息,与此同时存储过程PROC_MON_T已被触发,对应的MON_T表中已经可以查看到触发的时间。
sec@ora10g> select * from mon_t;

X
-------------------
2010-09-06 21:40:33

2)删除未满足x < 100条件的记录的测试
sec@ora10g> delete from t where x = 101;

1 row deleted.

sec@ora10g> select sql_text from V$XML_AUDIT_TRAIL;

SQL_TEXT
--------------------------------------------------------------------
delete from t where x = 1

sec@ora10g> select * from mon_t;

X
-------------------
2010-09-06 21:40:33

可见,在不满足审计条件的时候,不记录任何审计信息,因此存储过程亦不被触发。

5.小结
FGA细粒度审计调用存储过程的方法会给我们带来很多的便利,给我们的想象力留有空间。我们可以使用这个技术扩展FGA的功能。

Good luck.

secooler
10.09.06

-- The End --

分享好友

分享这个小栈给你的朋友们,一起进步吧。

OCM联盟
创建时间:2019-12-27 14:04:54
OCM联盟(OCMU – Oracle Certified Master Union)是一群有着共同理想,共同志向的DBA的家。 ⚠️该小栈仅限ocm成员入驻!审核制! Oracle Certified Master (OCM) -Oracle认证大师,是Oracle认证的别,是对数据库从业人员的技术、知识和操作技能的别的认可。Oracle OCM是解决困难的技术难题和复杂的系统故障的佳Oracle专家人选,也是IT行业衡量IT专家和经理人的高专业程度及经验的基准。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • 侯圣文@secooler
    栈主

小栈成员

查看更多
  • gaokeke123
  • ?
  • 山中老狐狸
  • 飘絮絮絮丶
戳我,来吐槽~