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)审计结果记录到XML文件的创建方法
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.XML + DBMS_FGA.EXTENDED,
11 audit_column_opts => DBMS_FGA.ANY_COLUMNS
12 );
13 end;
14 /
PL/SQL procedure successfully completed.
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 XML+EXTENDED ANY_COLUMNS
我们创建的审计规则尽收眼底。
4.触发审计规则并查看审计结果
1)触发审计规则
连接到sec用户向表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.
注意,这里我们重新连接sec用户再插入一条数据
sec@ora10g> conn sec/sec
Connected.
sec@ora10g> insert into t values (2,'Andy');
1 row created.
sec@ora10g> commit;
Commit complete.
2)查看V$XML_AUDIT_TRAIL中记录的审计信息
sec@ora10g> conn / as sysdba
Connected.
sys@ora10g> set feedback 1
sys@ora10g> select SQL_TEXT,SQL_BIND from V$XML_AUDIT_TRAIL;
SQL_TEXT
----------------------------------------------------------
SQL_BIND
----------------------------------------------------------
insert into t values (:"SYS_B_0",:"SYS_B_1")
#1(1):1 #2(8):secooler
insert into t values (:"SYS_B_0",:"SYS_B_1")
#1(1):2 #2(4):Andy
2 rows selected.
3)查看XML审计文件中的内容
(1)查看并进入到审计文件存放目录
ora10g@secdb /home/oracle$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Jun 5 21:00:24 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
sys@ora10g> show parameter user_dump_dest
sys@ora10g> show parameter audit_file_dest
NAME TYPE VALUE
----------------- ------- -------------------------------------
audit_file_dest string /oracle/ora10gR2/admin/ora10g/adump
sys@ora10g> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
ora10g@secdb /home/oracle$ cd /oracle/ora10gR2/admin/ora10g/adump
ora10g@secdb /oracle/ora10gR2/admin/ora10g/adump$
(2)查看生成的XML审计文件种类
ora10g@secdb /oracle/ora10gR2/admin/ora10g/adump$ ls -tlr
total 20K
-rw-r----- 1 oracle oinstall 634 Jun 5 21:05 ora_5367.aud
-rw-r--r-- 1 oracle oinstall 970 Jun 5 21:06 ora_3217384196.xml
-rw-r--r-- 1 oracle oinstall 110 Jun 5 21:07 adx_ora10g.txt
-rw-r----- 1 oracle oinstall 634 Jun 5 21:11 ora_5400.aud
-rw-r--r-- 1 oracle oinstall 966 Jun 5 21:11 ora_3217745444.xml
其中两个.aud结尾的文件记录了登录信息,与审计具体内容无关;
adx_ora10g.txt文件中记录了多次登录生成的审计文件列表;
以.xml结尾的文件详细记录了被审计到的信息。
(3)查看adx_ora10g.txt文件中的内容
ora10g@secdb /oracle/ora10gR2/admin/ora10g/adump$ cat adx_ora10g.txt
/oracle/ora10gR2/admin/ora10g/adump
ora_3217384196.xml
/oracle/ora10gR2/admin/ora10g/adump
ora_3217745444.xml
这里表示记录了两次审计触发过程。
(4)XML格式的审计信息内容
ora10g@secdb /oracle/ora10gR2/admin/ora10g/adump$ cat ora_3217384196.xml
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/oracleas/schema/dbserver_audittrail-10_2.xsd">
insert into t values (:"SYS_B_0",:"SYS_B_1")
ora10g@secdb /oracle/ora10gR2/admin/ora10g/adump$ cat ora_3217745444.xml
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/oracleas/schema/dbserver_audittrail-10_2.xsd">
insert into t values (:"SYS_B_0",:"SYS_B_1")
在以上的XML文件中以XML格式记录两次被审计的内容。
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.XML参数的审计规则
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.XML,
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 XML ANY_COLUMNS
4)触发审计规则
sys@ora10g> conn sec/sec
Connected.
sec@ora10g> insert into t values (3, 'HOU');
1 row created.
sec@ora10g> commit;
Commit complete.
5)查看V$XML_AUDIT_TRAIL视图中记录的审计结果
sec@ora10g> conn / as sysdba
Connected.
sys@ora10g> set feedback 1
sys@ora10g> select SQL_TEXT,SQL_BIND from V$XML_AUDIT_TRAIL;
SQL_TEXT
----------------------------------------------------------------
SQL_BIND
----------------------------------------------------------------
insert into t values (:"SYS_B_0",:"SYS_B_1")
#1(1):1 #2(8):secooler
insert into t values (:"SYS_B_0",:"SYS_B_1")
#1(1):2 #2(4):Andy
3 rows selected.
此处显示返回三行信息,最后一行空内容就说明了审计信息中没有记录SQL意义SQL的绑定变量信息。
6)查看XML文件中记录的审计结果
(1)审计文件生成列表
ora10g@secdb /oracle/ora10gR2/admin/ora10g/adump$ ls -ltr
total 32K
-rw-r----- 1 oracle oinstall 634 Jun 5 21:05 ora_5367.aud
-rw-r--r-- 1 oracle oinstall 970 Jun 5 21:06 ora_3217384196.xml
-rw-r----- 1 oracle oinstall 634 Jun 5 21:11 ora_5400.aud
-rw-r--r-- 1 oracle oinstall 966 Jun 5 21:11 ora_3217745444.xml
-rw-r----- 1 oracle oinstall 634 Jun 5 22:08 ora_5638.aud
-rw-r--r-- 1 oracle oinstall 165 Jun 5 22:09 adx_ora10g.txt
-rw-r----- 1 oracle oinstall 634 Jun 5 22:09 ora_5644.aud
-rw-r--r-- 1 oracle oinstall 857 Jun 5 22:09 ora_3218245620.xml
(2)查看adx_ora10g.txt文件中的XML文件列表
ora10g@secdb /oracle/ora10gR2/admin/ora10g/adump$ cat adx_ora10g.txt
/oracle/ora10gR2/admin/ora10g/adump
ora_3217384196.xml
/oracle/ora10gR2/admin/ora10g/adump
ora_3217745444.xml
/oracle/ora10gR2/admin/ora10g/adump
ora_3218245620.xml
(3)这里我们仅需查看最后一个XML文件即可
这个文件记录了我们最后一次被触发的审计信息。
ora10g@secdb /oracle/ora10gR2/admin/ora10g/adump$ cat ora_3218245620.xml
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/oracleas/schema/dbserver_audittrail-10_2.xsd">
XML文件中同样也没有记录SQL以及SQL绑定变量信息。效果得现。
6.小结
本文给出了将FGA细粒度审计结果信息记录在XML文件中的方法,到此我们已经将FGA的四种审计结果记录方式了然于胸。
Good luck.
secooler
11.06.05
-- The End --