ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle FGA细粒度审计——基于内容的数据库审计(二)

Oracle FGA细粒度审计——基于内容的数据库审计(二)

原创 Linux操作系统 作者:realkid4 时间:2011-06-27 21:44:22 0 删除 编辑

 

Oracle FGA细粒度审计特性是Oracle推出的基于内容灵活审计策略工具。借助FGA,很多过去需要使用触发器和应用代码的需求都可以方便的实现。

 

上篇(http://space.itpub.net/17203031/viewspace-700767)已经介绍FGA的原理和配置,本篇继续查看应用情况。

 

 

4、FGA审计实验

 

下面我们分别对上面设置的FGA审计规则结果进行查看。首先,我们介绍一下查看FGA审计结果的方式。

 

FGA审计策略和审计结果分别要记录在SYS用户下的fga$fga_log$数据表中。注意,这两个对象是xx$数据表,属于Oracle数据字典元数据信息层,是元数据的底层内容。该类型数据表只属于sys用户,而且只能被sys用户访问到。通常,该类型数据表是不能通过权限机制进行访问权限赋予的。

 

Xxx$数据表只有通过设置参数o7_DICTIONARY_ACCESSIBILITY开关设置才可能为非sys用户访问到。一般处于安全性考虑,我们也不进行这部分权限的开放。

 

 

SQL> show parameter o7

 

NAME                                 TYPE            VALUE

------------------------------------ -----------------------------------------------

O7_DICTIONARY_ACCESSIBILITY          boolean   FALSE

 

 

两个fga$fga_log$数据表中,fga$记录FGA审计策略信息,而fga_log$记录审计结果记录。

 

 

SQL> select obj#, pname, ptxt from fga$;

 

      OBJ# PNAME                PTXT

---------- -------------------- --------------------------------------------------------------------------------

     75156 POL_VID_LENGTH       length(vid)>5

     75156 POL_VID_MODIFY      

     75156 POL_DT_DEL           trunc(dt)

     75156 POL_VID_SELECT       to_char(sysdate,'Day') in ('星期六','星期日')

 

 

 

 

SQL> desc fga_log$;

Name         Type           Nullable Default Comments

------------ -------------- -------- ------- --------

SESSIONID    NUMBER                                  

TIMESTAMP#   DATE           Y                        

DBUID        VARCHAR2(30)   Y                        

OSUID        VARCHAR2(255)  Y                         

OSHST        VARCHAR2(128)  Y                        

CLIENTID     VARCHAR2(64)   Y                        

EXTID        VARCHAR2(4000) Y                        

OBJ$SCHEMA   VARCHAR2(30)   Y                        

OBJ$NAME     VARCHAR2(128)  Y                        

POLICYNAME   VARCHAR2(30)   Y                        

(篇幅原因,有省略……

 

 

通常我们检查FGA审计策略或者结果,都可以使用dba_audit_policiesdba_fga_audit_trail两个视图。这两个视图分别与fga$fga_log$对应。如果非sys用户进行FGA相关操作,拥有该两个视图的访问权限即可。

 

下面分别查看上面设置四个fga policy的情况。

 

ü        对数据表T插入VID长度超过5的操作进行审计记录;

 

对应审计策略:POL_VID_LENGTH

 

SQL> show user;

User is "scott"

 

SQL> insert into t values (4,'k45545', sysdate);

1 row inserted

 

SQL> commit;

Commit complete

 

--此时检查dba_fga_audit_trail

SQL> select session_id, timestamp, db_user, os_user, userhost,POLICY_NAME, SCN, SQL_TEXT from dba_fga_audit_trail;

 

SESSION_ID TIMESTAMP   DB_USER    OS_USER         USERHOST             POLICY_NAME                 SCN SQL_TEXT

---------- ----------- ---------- --------------- -------------------- -------------------- ---------- --------------------------------------------------------------------------------

   1630861 2011-6-24 2 SCOTT      Administrator   WORKGROUP\WWW-0E6111 DFF74 POL_VID_LENGTH          3861334 insert into t values (4,'k45545', sysdate)

                                                        

 

                                       

 

审计记录成功,当我们插入一条vid长度超过5的记录时,FGA记录下了审计信息。当我们插入非vid大于5的记录时,FGA是否记录呢?

 

SQL> insert into t values (5,'k', sysdate);

1 row inserted

 

SQL> commit;

Commit complete

 

SQL> select session_id, SCN, SQL_TEXT from dba_fga_audit_trail;

 

SESSION_ID        SCN SQL_TEXT

---------- ---------- --------------------------------------------------------------------------------

   1630861    3861334 insert into t values (4,'k45545', sysdate)

 

当不满足审计条件的时候,Oracle不会计入FGA审计记录。

 

ü        修改数据表VID的所有操作;

 

对应审计策略:POL_VID_MODIFY

 

 

SQL> update t set id=6 where id=5;

1 row updated

 

SQL> update t set vid='kkl' where id=1;

1 row updated

 

SQL> commit;

Commit complete

 

 

两条update语句,检查审计记录。

 

 

SQL> select session_id, SCN, SQL_TEXT from dba_fga_audit_trail;

 

SESSION_ID        SCN SQL_TEXT

---------- ---------- --------------------------------------------------------------------------------

   1630861    3861334 insert into t values (4,'k45545', sysdate)

 

   1630861    3862855 update t set vid='kkl' where id=1

 

 

对两条Update语句,只有针对vid有修改的那句SQL被审计信息记录下来。这点现象同FGA审计策略的要求相同。

 

ü        删除数据表TDT列为当前天之前日期记录的操作;

 

对应审计策略:POL_DT_DEL

 

 

SQL> select sysdate from dual;

 

SYSDATE

-----------

2011-6-24 2

 

SQL> select * from t;

 

        ID VID        DT

---------- ---------- -----------

         1 kkl        2011-6-23 1

         2 dfse       2011-6-22 1

         3 ffdfse     2011-6-24 1

         4 k45545     2011-6-24 2

         6 k          2011-6-24 2

 

 

进行删除实验。

 

 

SQL> delete t where id=2; //dt=2011-6-22

1 row deleted

 

SQL> delete t where id=6; //dt=2011-6-27

1 row deleted

 

SQL> commit;

Commit complete

 

SQL> select session_id, SCN, SQL_TEXT from dba_fga_audit_trail;

 

SESSION_ID        SCN SQL_TEXT

---------- ---------- --------------------------------------------------------------------------------

   1630861    3861334 insert into t values (4,'k45545', sysdate)

 

   1630861    3862855 update t set vid='kkl' where id=1

 

   1630861    3863122 delete t where id=2

 

 

dt在当前日期之前记录进行删除delete的操作,会被审计策略记录下来。

 

ü        在周末(周日、周六),检索VID数据的操作;

 

对应FGA审计策略POL_VID_SELECT

 

//当天是周五的情况下

SQL> select to_char(sysdate,'Day') from dual;

 

TO_CHAR(SYSDATE,'DAY')

----------------------

星期五

 

 

我们进行两次检索实验。

 

//检索操作涉及到vid字段;

SQL> select * from t;

 

        ID VID        DT

---------- ---------- -----------

         1 kkl        2011-6-23 1

         3 ffdfse     2011-6-24 1

         4 k45545     2011-6-24 2

 

//检索操作为涉及到vid字段;

SQL> select id from t;

 

        ID

----------

         1

         3

         4

 

 

此时,检索结果。

 

 

SQL> select session_id, SCN, SQL_TEXT from dba_fga_audit_trail;

 

SESSION_ID        SCN SQL_TEXT

---------- ---------- --------------------------------------------------------------------------------

   1630861    3861334 insert into t values (4,'k45545', sysdate)

 

   1630861    3862855 update t set vid='kkl' where id=1

 

   1630861    3863122 delete t where id=2

 

 

没有新的审计结果出现。

 

Linux下修改系统时间信息。

 

//当前系统时间

[root@oracle11g ~]# date

Fri Jun 24 22:42:06 CST 2011

 

//系统时间设置

[root@oracle11g ~]# date 062522452011.30

Sat Jun 25 22:45:30 CST 2011

 

 

此时,Oracle数据库立即反应出变化。

 

 

SQL> select sysdate from dual;

 

SYSDATE

-----------

2011-6-25 2

 

SQL> select to_char(sysdate,'Day') from dual;

 

TO_CHAR(SYSDATE,'DAY')

----------------------

星期六

 

 

此时,我们进行相同的操作,就可以发现策略应用。

 

 

SQL> select * from t;

 

        ID VID        DT

---------- ---------- -----------

         1 kkl        2011-6-23 1

         3 ffdfse     2011-6-24 1

         4 k45545     2011-6-24 2

 

SQL> select id from t;

 

        ID

----------

         1

         3

         4

 

SQL> select session_id, SCN, SQL_TEXT from dba_fga_audit_trail;

 

SESSION_ID        SCN SQL_TEXT

---------- ---------- --------------------------------------------------------------------------------

   1630861    3861334 insert into t values (4,'k45545', sysdate)

   1630861    3862855 update t set vid='kkl' where id=1

   1630861    3863122 delete t where id=2

   1630861    3868781 select * from t

 

4 rows selected

 

 

FGA策略pol_vid_select的应用成功。只有在周末的时候,对vid字段的select操作进行操作才会被审计记录。

 

 

本篇中我们观察了设置的四个policies的审计实现。下面我们来观察一下dbms_fga的其他方法和审计记录purge的方式。

 

 

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

请登录后发表评论 登录
全部评论
求道~

注册时间:2010-11-30

  • 博文量
    545
  • 访问量
    7753755