ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【FGA】将FGA细粒度审计功能的审计结果记录在数据库中

【FGA】将FGA细粒度审计功能的审计结果记录在数据库中

原创 Linux操作系统 作者:secooler 时间:2011-06-02 21:31:08 0 删除 编辑
  Oracle引以为傲的FGA细粒度审计功能为监控系统中的异常操作提供了非常便捷的手段。本文给出使用FGA功能将审计信息记录到数据库中的方法。

1.初始化环境
1)清理环境
sys@ora10g> conn / as sysdba
Connected.
sys@ora10g> exec DBMS_FGA.DROP_POLICY ( object_schema => 'SEC', object_name => 'T', policy_name => 'audit_t');

PL/SQL procedure successfully completed.

sys@ora10g> conn sec/sec
Connected.
sec@ora10g> drop table t purge;

Table dropped.

2)创建待审计表T
sys@ora10g> create table t (x number(10), y varchar2(10));

Table created.

2.创建FGA审计策略
1)audit_trail参数设置说明
①audit_trail参数设置为“DBMS_FGA.DB”:审计信息记录到数据库的SYS.FGA_LOG$中,但不包含SQL语句和SQL的绑定变量信息;
②audit_trail参数设置为“DBMS_FGA.DB + DBMS_FGA.EXTENDED”(默认值):审计信息记录到数据库的SYS.FGA_LOG$中,同时包含SQL语句和SQL的绑定变量信息;
③audit_trail参数设置为“DBMS_FGA.XML”:审计信息记录到AUDIT_FILE_DEST参数对应的操作系统目录下,为XML格式,但不包含SQL语句和SQL的绑定变量信息;
④audit_trail参数设置为“DBMS_FGA.XML + DBMS_FGA.EXTENDED”:审计信息记录到AUDIT_FILE_DEST参数对应的操作系统目录下,为XML格式,同时包含SQL语句和SQL的绑定变量信息;

这里重点介绍审计记录到数据库中的方法。

2)审计结果记录到数据库的创建方法
sec@ora10g> conn / as sysdba
Connected.
sys@ora10g> begin
  2  DBMS_FGA.ADD_POLICY (
  3  object_schema => 'SEC',
  4  object_name => 'T',
  5  policy_name => 'audit_t',
  6  audit_condition => 'X < 100',
  7  audit_column => 'X',
  8  enable => TRUE,
  9  statement_types => 'SELECT, INSERT, UPDATE, DELETE',
 10  audit_trail => DBMS_FGA.DB + DBMS_FGA.EXTENDED,
 11  audit_column_opts => DBMS_FGA.ANY_COLUMNS
 12  );
 13  end;
 14  /

PL/SQL procedure successfully completed.

以上创建审计规则中audit_trail和audit_column_opts采用的是默认值,因此上面的审计策略也可以用以下命令实现。
begin
DBMS_FGA.ADD_POLICY (
object_schema => 'SEC',
object_name => 'T',
policy_name => 'audit_t',
audit_condition => 'X < 100',
audit_column => 'X',
enable => TRUE,
statement_types => 'SELECT, INSERT, UPDATE, DELETE'
);
end;
/

3.查询确认FGA审计策略
通过DBA_AUDIT_POLICIES视图可以查看数据库中的审计规则。
sys@ora10g> col OBJECT_SCHEMA for a3
sys@ora10g> col OBJECT_NAME for a2
sys@ora10g> col POLICY_NAME for a7
sys@ora10g> col POLICY_TEXT for a10
sys@ora10g> col POLICY_COLUMN for a2
sys@ora10g> col PF_SCHEMA for a2
sys@ora10g> col PF_PACKAGE for a2
sys@ora10g> col PF_FUNCTION for a2
sys@ora10g> select * from dba_audit_policies;

OBJ OB POLICY_ POLICY_TEX PO PF PF PF ENA SEL INS UPD DEL AUDIT_TRAIL  POLICY_COLU
--- -- ------- ---------- -- -- -- -- --- --- --- --- --- ------------ -----------
SEC T  AUDIT_T X < 100    X           YES YES YES YES YES DB+EXTENDED  ANY_COLUMNS

我们创建的审计规则尽收眼底。

4.触发审计规则并查看审计结果
1)触发审计规则
向表T中插入一条x列值小于100的记录。
sys@ora10g> conn sec/sec
Connected.
sec@ora10g> insert into t values (1,'secooler');

1 row created.

sec@ora10g> commit;

Commit complete.

2)查看审计结果
审计信息记录此时已经记录到了数据库中,我们可以通过检索SYS.FGA_LOG$视图获得审计信息。
sec@ora10g> conn / as sysdba
Connected.
sys@ora10g> select count(*) from SYS.FGA_LOG$;

  COUNT(*)
----------
         1

sys@ora10g> set FEEDBACK 1
sys@ora10g> select LSQLTEXT,LSQLBIND from SYS.FGA_LOG$;

LSQLTEXT
------------------------------------------------------
LSQLBIND
------------------------------------------------------
insert into t values (:"SYS_B_0",:"SYS_B_1")
 #1(1):1 #2(8):secooler

1 row selected.

以上选取了LSQLTEXT和LSQLBIND字段,这两个字段记录了被审计表对应的SQL语句以及绑定变量具体值,这便是audit_trail参数的DBMS_FGA.EXTENDED内容在起作用。

5.测试审计规则不带DBMS_FGA.EXTENDED参数内容的审计效果
若审计规则中不带DBMS_FGA.EXTENDED参数,则触发审计规则后,SQL语句和绑定变量值将不被记录。
1)删除审计策略
sys@ora10g> exec DBMS_FGA.DROP_POLICY ( object_schema => 'SEC', object_name => 'T', policy_name => 'audit_t');

PL/SQL procedure successfully completed.

2)创建不带DBMS_FGA.EXTENDED参数仅含有DBMS_FGA.DB参数的审计规则
sys@ora10g> begin
  2  DBMS_FGA.ADD_POLICY (
  3  object_schema => 'SEC',
  4  object_name => 'T',
  5  policy_name => 'audit_t',
  6  audit_condition => 'X < 100',
  7  audit_column => 'X',
  8  enable => TRUE,
  9  statement_types => 'SELECT, INSERT, UPDATE, DELETE',
 10  audit_trail => DBMS_FGA.DB,
 11  audit_column_opts => DBMS_FGA.ANY_COLUMNS
 12  );
 13  end;
 14  /

PL/SQL procedure successfully completed.

3)确认审计规则
sys@ora10g> col OBJECT_SCHEMA for a3
sys@ora10g> col OBJECT_NAME for a2
sys@ora10g> col POLICY_NAME for a7
sys@ora10g> col POLICY_TEXT for a10
sys@ora10g> col POLICY_COLUMN for a2
sys@ora10g> col PF_SCHEMA for a2
sys@ora10g> col PF_PACKAGE for a2
sys@ora10g> col PF_FUNCTION for a2
sys@ora10g> select * from dba_audit_policies;

OBJ OB POLICY_ POLICY_TEX PO PF PF PF ENA SEL INS UPD DEL AUDIT_TRAIL  POLICY_COLU
--- -- ------- ---------- -- -- -- -- --- --- --- --- --- ------------ -----------
SEC T  AUDIT_T X < 100    X           YES YES YES YES YES DB           ANY_COLUMNS

注意此时AUDIT_TRAIL字段显示的内容仅为“DB”。

4)触发审计规则
sys@ora10g> conn sec/sec
Connected.
sec@ora10g> insert into t values (2, 'Andy');

1 row created.

sec@ora10g> commit;

Commit complete.

5)查看审计结果
sec@ora10g> conn / as sysdba
Connected.
sys@ora10g> set FEEDBACK 1
sys@ora10g> select LSQLTEXT,LSQLBIND from SYS.FGA_LOG$;

LSQLTEXT
-------------------------------------------------------
LSQLBIND
-------------------------------------------------------
insert into t values (:"SYS_B_0",:"SYS_B_1")
 #1(1):1 #2(8):secooler





2 rows selected.

sys@ora10g> select count(*) from SYS.FGA_LOG$;

  COUNT(*)
----------
         2

1 row selected.

可见此时第二次触发的审计信息没有记录SQL和绑定变量的信息。以下是获取到的全部审计信息。
sys@ora10g> set head off
sys@ora10g> select * from SYS.FGA_LOG$;

     27595                   SEC
oracle
secdb

oracle
SEC
T
AUDIT_T                                 0

insert into t values (:"SYS_B_0",:"SYS_B_1")



         2 28-MAY-11 08.11.33.914507 AM
         0 5100             0700280096060000                                                                           9     1

 #1(1):1 #2(8):secooler

     27596                   SEC
oracle
secdb

oracle
SEC
T
AUDIT_T                                 0





         2 28-MAY-11 08.12.34.629837 AM
         0 5106             07000B0097060000                                                                           9     1




2 rows selected.

这里清晰的记录两次审计触发的内容。

6.小结
  本文给出了使用FGA细粒度审计功能实现将审计信息记录在数据库中的方法,这也是Oracle默认采用的方法。
  与此对应的便是将审计信息以XML格式记录到文件中。下回分解。

Good luck.

secooler
11.06.02

-- The End --

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

请登录后发表评论 登录
全部评论
Oracle ACE 总监,阿里云MVP,北京大学理学硕士,恩墨学院创始人,教育专家,中国区 Cloudera 首位官方授权大数据讲师,金牌培训专家,BDA大数据联盟创始人,OCM联盟创始人,ACCUG创始人、ACOUG核心专家,Blogger。

注册时间:2008-03-16

  • 博文量
    797
  • 访问量
    8199800