Oracle的审计功能主要用来追踪敏感的数据操作,其应用包含两部分类容:
(1),普通的审计
(2),FGA细粒度审计
(3),对sys用户行为的审计
相互独立,FGA是对审计的扩充.
1,普通审计
包括对象审计,权限审计,语句审计,下面普通审计以对象审计为例子.
(1),审计对象:HR用户的所有表
(2),参数设置audit_trail
SQl>alter system set audit_trail = db scope = spfile;
SQL>shutdown immediate;
SQL>startup;
(3),启用对用户HR的审计
审计表的增,删,改;经过启用,HR会对其所有表的增,删,改进行行为记录,包括那些没有修改成功的操作.如:更新一条记录,但没有更新成功,也会被记录.
SQL>audit insert table,update table,delete table by HR;
审计存储过程的执行情况.
SQL>audit execute procedure by HR;
(4)验证
SQL> select os_username,username,to_char(extended_timestamp,'dd-mon-yyyy hh24:mi:ss') timestamp,owner,obj_name,action_name from dba_audit_trail where owner = 'HR' order by timestamp;
OS_USERNAME USERNAME TIMESTAMP OWNER OBJ_NAME ACTION_NAME
--------------- ------------------------------ -------------------- ------------------------------ ---------------
oracle HR 10-mar-2012 14:48:18 HR EMPLOYEES UPDATE
oracle HR 10-mar-2012 14:50:24 HR EMPLOYEES UPDATE
oracle HR 10-mar-2012 15:03:51 HR EMPLOYEES UPDATE
oracle HR 10-mar-2012 15:04:07 HR EMPLOYEES UPDATE
oracle HR 10-mar-2012 15:04:18 HR EMPLOYEES UPDATE
oracle HR 10-mar-2012 16:39:57 HR EMPLOYEES UPDATE
jeron HR 10-mar-2012 16:55:20 HR EMPLOYEES UPDATE
oracle HR 10-mar-2012 19:16:53 HR ACCOUNTS DELETE
6 rows selected.
只要是HR对表有任何增,删,改;视图dba_audit_trail中都可以查询出来;底层表为AUD$.
2,FGA审计
(1),审计的粒度比普通的审计要细,可以针对具体用户,具体的表,具体的列,具体的操作进行审计.
(2),参数设置audit_trail与普通审计完全一致,同上设置.
(3),启用对用户HR的employees表中,salary薪水这一列的增,删,改进行审核.
BEGIN
DMBS_FGA.ADD_POLICY(
OBJECT_SCHEMA=>'HR',
OBJECT_NAME=>'EMPLOYEES',
POLICY_NAME=>'FGA_EMP_SALARY',
AUDIT_CONDITION=>NULL,
AUDIT_COLUMN=>'SALARY',
STATEMENT_TYPES=>'INSERT,UPDATE,DELETE');
END;
/
执行成功后,表示上述要求的审计已经启用.
(4),查看设置结果
查看创建的FGA策略,名字与详细情况.
SQL>desc dba_audit_policies;
SQL>select policy_name,object_schema,object_name,policy_column,sel,ins,upd,del from dba_audit_policies;
POLICY_NAME OBJECT_SCHEMA OBJECT_NAME POLICY_COLUMN SEL INS UPD DEL
-------------------- -------------------- -------------------- -------------------- --- --- --- ---
FGA_EMP_SALARY HR EMPLOYEES SALARY NO YES YES YES
查看审计执行的情况
SQL>desc dba_fga_audit_trail;
SQL>select to_char(timestamp,'mm-dd-yyyy hh24:mi:ss') time,db_user,sql_text from dba_fga_audit_trail order by time;
TIME DB_USER SQL_TEXT
-------------------- ---------- ------------------------------------------------------------------------------------------
03-10-2012 16:39:58 HR update employees set salary = 9000 where first_name = 'Jerron' and last_name = 'Peng'
03-10-2012 16:55:20 HR update employees set salary = 9100 where first_name = 'Jerron' and last_name = 'Peng'
03-10-2012 20:13:16 HR delete from employees where employee_id = 200
可以看出什么时候,什么用户执行了什么操作,被FGA审计记录.
(5),上面的这些视图的基表为fga_log$
注意:以上的两个基表aud$,fga_log$都是在system表空间,最好将至转移到独立的表空间中.
3,sys审计
audit_sys_operations参数可以帮助数据库对sys用户的行为进行审计,官方的解释如下。
参见http://docs.oracle.com/cd/E11882_01/server.112/e25513/initparams015.htm#REFRN10005
当启用该参数时,数据库重启生效,但Windows和Linux服务器对该审计记录访问的方式不同。
Linux会将audit trail保存在audit_file_dest;
Windows的audit trail保存在系统日志的application中,此时audit_file_dest在Windows中并不生效.