ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【FGA】扩展Oracle细粒度审计功能——调用定制的存储过程

【FGA】扩展Oracle细粒度审计功能——调用定制的存储过程

Linux操作系统 作者:mzd75 时间:2013-12-07 11:16:28 0 删除 编辑
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_types     => '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 --

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/148459/viewspace-1062620/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-11-30

  • 博文量
    74
  • 访问量
    213508