版权声明:本文为博主原创文章,转载请注明出处,谢谢。http://blog.csdn.net/lukeunique
本章主要针对统一审计(Unified Auditing)的一些基础知识,进行概要的讲解和回顾。
审计功能(Audit)用于监视用户所执行的数据库操作,并且Oracle会将审计跟踪结果存放指定的地方。
Oracle Database 12c 推出一套全新的审计架构,称为统一审计功能。统一审计主要利用策略和条件在 Oracle 数据库内部有选择地执行有效的审计。新架构将现有审计跟踪统一为单一审计跟踪,从而简化了管理,提高了数据库生成的审计数据的安全性。
关于统一审计的基础知识,大家可以参考以下Oracle的官方在线文档,在这里仅作简单的介绍。
Database Security Guide
https://docs.oracle.com/database/121/DBSEG/auditing.htm#DBSEG630
初始安装的12c数据库,为了兼容以前的版本默认启用混合模式,即传统审计和统一审计同时有效。你可以通过手动移植到完全的统一审计,也可以使统一审计无效,沿用传统审计。
你可以通过以下的SQL文,查询统一审计是否有效。TRUE表示完全的统一审计有效。FALSE表示并非是完全的统一审计。
SQL>SELECT PARAMETER,VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';
PARAMETER VALUE
---------------- ----------
Unified Auditing TRUE
(注意:在SE的数据库12.1.0.1和12.1.0.2版本中,由于Bug 17466854的影响,即使完全的统一审计有效的情况下,V$OPTION的Unified Auditing行也表示为FALSE。Bug 17466854将在未来版本12.2中修复。)
你可以通过以下的方法把数据库审计的混合模式切换到完全的统一审计(UNIX为例)。
SQL> conn /as sysdba
SQL> SHUTDOWN IMMEDIATE
SQL> EXIT
$ lsnrctl stop listener_name
$ cd $ORACLE_HOME/rdbms/lib
$ make -f ins_rdbms.mk uniaud_on ioracle ORACLE_HOME=$ORACLE_HOME
$ lsnrctl start listener_name
SQL> conn /as sysdba
SQL> STARTUP
你也可以通过以下的方法把数据库统一审计功能关闭掉(UNIX为例)。
SQL> conn /as sysdba
SQL> SHUTDOWN IMMEDIATE
SQL> EXIT
$ lsnrctl stop listener_name
$ cd $ORACLE_HOME/rdbms/lib
$ make -f ins_rdbms.mk uniaud_off ioracle
$ lsnrctl start listener_name
SQL> conn /as sysdba
SQL> STARTUP
12c数据库中预先定义了一些审计策略,并且根据版本不同,默认开启的审计策略也略有不同。
我们可以通过audit_unified_enabled_policies视图进行确认默认开启的统一审计的审计策略。
SQL> --12.1.0.2的默认审计策略
SQL> select USER_NAME,POLICY_NAME,ENABLED_OPT,SUCCESS,FAILURE from audit_unified_enabled_policies;
USER_NAME POLICY_NAME ENABLED_OPT SUCCES FAILUR
-------------------- -------------------- ---------------- ------ ------
ALL USERS ORA_SECURECONFIG BY YES YES
ALL USERS ORA_LOGON_FAILURES BY NO YES
SQL> --12.1.0.1的默认审计策略
SQL> select USER_NAME,POLICY_NAME,ENABLED_OPT,SUCCESS,FAILURE from audit_unified_enabled_policies;
USER_NAME POLICY_NAME ENABLED_OPT SUCCES FAILUR
-------------------- -------------------- ---------------- ------ ------
ALL USERS ORA_SECURECONFIG BY YES YES
由上面的输出结果我们可以看到,不做任何配置的情况下,
在12.1.0.2数据库的环境中,默认开启了ORA_SECURECONFIG和ORA_LOGON_FAILURES审计策略,数据库会根据这2个审计策略,对相应的操作进行审计。
在12.1.0.1数据库的环境中,默认开启了ORA_SECURECONFIG审计策略,数据库会根据这个审计策略,对相应的操作进行审计。
需要说明的是,ORA_SECURECONFIG审计策略在12.1.0.1和12.1.0.2的版本上的定义是不同的。
在12.1.0.1数据库的环境中,ORA_SECURECONFIG审计策略包含了对所有LOGON和LOGOFF的审计。
而在12.1.0.2数据库中,,ORA_SECURECONFIG审计策略移除了对所有LOGON和LOGOFF的审计,而增加了一个新的审计策略ORA_LOGON_FAILURES,用于仅审计登陆失败的操作。这样更加方管理,也能改善因为大量LOGON和LOGOFF的审计对表空间的浪费。
ORA_SECURECONFIG审计策略的详细可以参考以下官方在线文档,
http://docs.oracle.com/database/121/DBSEG/audit_config.htm#CHDIGFHG
ORA_LOGON_FAILURES审计策略的详细可以参考以下,
http://docs.oracle.com/database/121/DBSEG/audit_config.htm#DBSEG703
无效掉默认的审计策略方法。
SQL>--12.1.0.2的环境
SQL> noaudit policy ORA_SECURECONFIG;
Noaudit succeeded.
SQL> noaudit policy ORA_LOGON_FAILURES;
Noaudit succeeded.
SQL>--12.1.0.1的环境
SQL> noaudit policy ORA_SECURECONFIG;
Noaudit succeeded.
用户可以根据自身的业务需求,通过CREATE AUDIT POLICY文做成定制的审计策略,以达到审计的目的。
审计策略做成文CREATE AUDIT POLICY的详细语法,可以参考以下官方在线文档,
https://docs.oracle.com/database/121/DBSEG/audit_config.htm#DBSEG357
CREATE AUDIT POLICY policy_name
{ {privilege_audit_clause [action_audit_clause ] [role_audit_clause ]}
| { action_audit_clause [role_audit_clause ] }
| { role_audit_clause }
}
[WHEN audit_condition EVALUATE PER {STATEMENT|SESSION|INSTANCE}]
[CONTAINER = {CURRENT | ALL}];
SQL> --创建一个审计策略,审计对表scott.emp的select操作
SQL> create audit policy up1
2 actions select on scott.emp;
审计策略已创建。
SQL> --使审计策略有效
SQL> audit policy up1;
审计已成功。
SQL> --确认做成的审计策略
SQL> set linesize 200
SQL> col POLICY_NAME format a20
SQL> col OBJECT_NAME format a15
SQL> select POLICY_NAME,AUDIT_OPTION_TYPE,OBJECT_NAME,COMMON from AUDIT_UNIFIED_POLICIES where POLICY_NAME = upper('up1');
POLICY_NAME AUDIT_OPTION_TYPEOBJECT_NAME COMMON
-------------------- ------------------------------------ --------------- ------
UP1 OBJECT ACTIONEMP NO
SQL> --确认现在有效的审计策略
SQL> col POLICY_NAME format a20
SQL> col USER_NAME format a20
SQL> select USER_NAME,POLICY_NAME,ENABLED_OPT,SUCCESS,FAILURE from AUDIT_UNIFIED_ENABLED_POLICIES;
USER_NAMEPOLICY_NAME ENABLED_OPT SUCCES FAILUR
-------------------- -------------------- ---------------- ------ ------
ALL USERSORA_SECURECONFIG BY YESYES
ALL USERSORA_LOGON_FAILURES BY NO YES
ALL USERSUP1 BY YESYES
SQL> --无效掉审计策略
SQL> NOAUDIT POLICY UP1;
审计未成功。
SQL> --再次确认现在有效的审计策略,UP1已经没有了。
SQL> select USER_NAME,POLICY_NAME,ENABLED_OPT,SUCCESS,FAILURE from AUDIT_UNIFIED_ENABLED_POLICIES;
USER_NAMEPOLICY_NAME ENABLED_OPT SUCCES FAILUR
-------------------- -------------------- ---------------- ------ ------
ALL USERSORA_SECURECONFIG BY YESYES
ALL USERSORA_LOGON_FAILURES BY NO YES
SQL> --删除审计策略
SQL> DROP AUDIT POLICY UP1;
审计策略已删除。
SQL> select POLICY_NAME,AUDIT_OPTION_TYPE,OBJECT_NAME,COMMON from AUDIT_UNIFIED_POLICIES where POLICY_NAME = upper('up1');
未选定行
注意:在删除某审计策略之前,必须无效掉该审计策略,否则会报ORA-46361错误。
SQL> DROP AUDIT POLICY UP1;
DROP AUDIT POLICY UP1
*
第 1 行出现错误:
ORA-46361: 当前已启用审计策略, 因此无法删除此策略。
AUDIT_UNIFIED_POLICIES用于确认数据库内所有的审计策略的详细
AUDIT_UNIFIED_ENABLED_POLICIES用于确认现在有效的审计策略
关于统一审计的动态视图和字典表的详细,可以参考以下官方在线文档,
https://docs.oracle.com/database/121/DBSEG/audit_config.htm#DBSEG0635
以前的审计功能,不同的组件会放在不同的位置存储,例如:
在统一审计功能下,存储和查看更加简单化,所有的审计结果都存放在新追加的AUDSYS schema下,并可以通过字典表UNIFIED_AUDIT_TRAIL,进行确认。
SQL> col OS_USERNAME format a15
SQL> col SQL_TEXT format a30
SQL> COL AUDIT_TYPE format a10
SQL> col ACTION_NAME format a10
SQL> col UNIFIED_AUDIT_POLICIES format a10
SQL> select AUDIT_TYPE,OS_USERNAME,TERMINAL,ACTION_NAME,
2 SQL_TEXT,UNIFIED_AUDIT_POLICIES
3 from UNIFIED_AUDIT_TRAIL where OBJECT_NAME='EMP';
AUDIT_TYPE OS_USERNAME TERMINAL ACTION_NAM SQL_TEXT UNIFIED_AU
---------- --------------- -------------------------------- ---------- ------------------------------ ----------
Standard XXXXX-CN\walt XXXX-CN SELECT SELECT COUNT(*) FROM scott.emp UP1
创建一个审计策略
↓
使审计策略有效
↓
执行相关的操作
↓
统一审计的审计结果写到数据文件
↓
确认审计结果
版权声明:本文为博主原创文章,转载请注明出处,谢谢。http://blog.csdn.net/lukeunique