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_policies和dba_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审计策略的要求相同。
ü 删除数据表T中DT列为当前天之前日期记录的操作;
对应审计策略: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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17203031/viewspace-700837/