Oracle审计篇——统一审计

一、 统一审计作用
统一审计跟踪从各种来源捕获审计信息。通过统一审计,您可以从以下来源捕获审计记录:

来自统一审计策略和AUDIT设置中的审计记录(包括sys的审计记录)
来自DBMS_FGA的细粒度审计记录
Oracle Database Real Application Security审计记录
Oracle Recovery Manager审计记录
Oracle Database Vault审计记录
Oracle Label Security审计记录
Oracle Data Mining记录
Oracle Data Pump
Oracle SQL * Loader直接加载
统一审计跟踪(unified audit trail)存放在SYSAUX表空间AUDSYS schema下的只读表中,审计信息通过UNIFIED_AUDIT_TRAIL视图以统一格式提供访问,在单实例和RAC中均可用。

当数据库可写时,审计记录将写入统一审计跟踪(DB中只读表)。如果数据库不可写,则审计记录将写入$ORACLE_BASE/audit/$ORACLE_SID目录

二、 统一审计优点
1. 启用统一审计后,不再依赖于先前版本中使用的初始化参数

AUDIT_TRAIL
AUDIT_FILE_DEST
AUDIT_SYS_OPERATIONS
AUDIT_SYSLOG_LEVEL
UNIFIED_AUDIT_SGA_QUEUE_SIZE
2. 审计记录格式和存放位置统一

所有审计记录(包括对SYS的审计记录)都采用统一格式存放在同一位置,无须查看不同位置和查找不同格式的审计记录。

3. 提升了审计记录的管理和安全性

4. 整体审计性能大大提高。

默认情况下,审计记录会自动写入AUDSYS架构中的内部关系表。

5. 简单的审计策略管理方式

可以创建命名审计策略,以审计第一节列出的受支持组件及SYS用户。此外,可以在策略中构建条件和排除项。

如果使用Oracle Audit Vault和Database Firewall,统一审计跟踪可以极大地方便收集审计数据,因为所有数据都来自同一位置。

三、 传统审计与统一审计的对比
12c之前的审计(传统审计)

不同层次审计策略配置方式不统一、存储格式及位置不统一、查看方式不统一

统一审计

整合各层次审计内容(①②层除外),以统一格式存放在相同位置,统一通过UNIFIED_AUDIT_TRAIL视图查看

四、混合模式审计
混合模式审计是12c开始新安装数据库中的默认审计方式,同时使用传统审计(12c之前的审计)和统一审计。

1. 混合模式审计架构图

2. 纯统一审计模式

3. 混合模式审计和纯统一审计之间的差异

模式

特征

启用

混合模式审核

既有传统审计,也有统一审计;可以使用统一审计工具和传统的审计工具

启用任何统一审计策略。无需重新启动数据库。

纯统一审计

只有统一审计;只能使用统一审计工具

以uniaud_on选项链接二进制文件oracle,然后重新启动数据库。

4. 查看数据库审计模式

TRUE为纯统一审计,FALSE为使用混合模式审计

SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';
5. 混合模式切换为纯统一审计

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
6. 关闭统一审计

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
五、 统一审计策略管理
1. 谁可以进行审计
Oracle为执行审计的用户提供了两个角色:AUDIT_ADMIN和AUDIT_VIEWER。

AUDIT_ADMIN:创建统一和细粒度的审计策略、查看审计数据及管理审计跟踪管理(读写权限)
AUDIT_VIEWER:查看和分析审计数据(只读权限),需要此角色的用户通常是外部审计员。
2. 默认开启的统一审计策略
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.1中,默认开启了ORA_SECURECONFIG审计策略,数据库会根据这个审计策略
12.1.0.2中,默认开启了ORA_SECURECONFIG和ORA_LOGON_FAILURES审计策略
需要说明的是,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 语句

Configuring Audit Policies

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}];
一个简单的例子

--创建审计策略,审计对表scott.emp的select操作
SQL> create audit policy up1 actions select on scott.emp;
审计策略已创建。
 
--启用审计策略
SQL> audit policy up1;
审计已成功。
 
--查看审计策略
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> 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   YES YES
ALL USERSORA_LOGON_FAILURES   BY   NO YES
ALL USERSUP1  BY   YES YES
 
--禁用审计策略
NOAUDIT POLICY UP1;
审计未成功。
 
--删除审计策略
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 - 记录DB内所有统一审计策略

AUDIT_UNIFIED_ENABLED_POLICIES - 记录DB内所有已启用的统一审计策略

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
八、 统一审计审计结果写入模式
统一审计的审计结果写到数据文件中的方式主要有2种

立即写模式(Immediate-write mode)
队列写入模式(Queued-write mode)
1. 立即写模式
同步写入方法,审计结果生成后,直接写入到AUDSYS schema 的审计表CLI_SWP$XXXX中。

与12c之前的传统审计结果写入磁盘方式相同,在生成审计结果的同时立即写入到磁盘中。优点是不会因为实例突然崩溃等导致审计数据的丢失。但另一方面,因为操作和审计磁盘写同时进行,会对数据库操作的性能产生一定的影响。

2. 队列写入模式(默认)
异步写入方法,审计结果生成后,先保存在SGA中称为[SGA Queue]的队列中,满足以下任一条件时由后台进程GEN0写入到磁盘(AUDSYS schema 的审计表CLI_SWP$XXXX)

达到刷新时间间隔
达到[SGA Queue]队列的临界值
[SGA Queue]的大小由参数UNIFIED_AUDIT_SGA_QUEUE_SIZE确定,默认大小为1M,可设置的范围为1MB ~ 30 MB 

  SQL> show parameter UNIFIED_AUDIT
 
  NAME                            TYPE      VALUE
  ------------------------------- --------- -----------
  unified_audit_sga_queue_size    integer   1048576


查看统一审计相关参数

  SQL> col Description format a26
  SQL> col Parameter format a30
  SQL> select a.ksppinm "Parameter",a.KSPPDESC "Description",
    2         b.ksppstvl "Value"
    3  from sys.x$ksppi a, sys.x$ksppcv b
    4  where a.indx = b.indx and a.ksppinm like '%unified_audit%';
 
  Parameter                      Description                 Value
  ------------------------------ --------------------------  --------
  _unified_audit_policy_disabled Disable Default Unified Au  FALSE
                                 dit Policies on DB Create 
 
  unified_audit_sga_queue_size   Size of Unified audit SGA   1048576
                                 Queue                     
 
  _unified_audit_flush_threshold Unified Audit SGA Queue Fl  85 ★
                                 ush Threshold                
 
  _unified_audit_flush_interval  Unified Audit SGA Queue Fl  3  ★
                                 ush Interval
可以看到,

SGA Queue自动刷新间隔由隐含参数_unified_audit_flush_interval控制,默认为3秒。
SGA Queue自动刷新临界值由隐含参数_unified_audit_flush_threshold控制,默认为SGA Queue大小的85% 即:UNIFIED_AUDIT_SGA_QUEUE_SIZE * 85% 。
队列写入模式的优点是可以最大限度地减少由于审计对数据库操作性能的影响,但是由于是异步写入的方式,所以因为实例突然崩溃(Instance Crash)或者SHUTDOWN ABORT等情况下,有可能导致在SGA中的审计数据的丢失。

手动把SGA Queue中的统一审计结果刷到审计表CLI_SWP$XXXX中

SQL> EXEC DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL;
 
PL/SQL procedure successfully completed.
3. 统一审计结果写入模式设定
通过DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY函数,对数据库默认的写入模式进行修改。需要注意的是,该设置仅对当前的CDB或PDB有效。

--设定立即写模式(Immediate-write mode)
SQL> BEGIN
  2   DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY(
  3      DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
  4      DBMS_AUDIT_MGMT.AUDIT_TRAIL_WRITE_MODE,
  5      DBMS_AUDIT_MGMT.AUDIT_TRAIL_IMMEDIATE_WRITE);
  6  END;
  7  /
 
PL/SQL procedure successfully completed.
 
--确认写入模式
SQL> SELECT PARAMETER_VALUE
  2  FROM DBA_AUDIT_MGMT_CONFIG_PARAMS
  3  WHERE PARAMETER_NAME = 'AUDIT WRITE MODE';
 
PARAMETER_VALUE
-------------------------------------------------
IMMEDIATE WRITE MODE
--设定队列写入模式(Queued-write mode)
SQL> BEGIN
  2   DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY(
  3      DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
  4      DBMS_AUDIT_MGMT.AUDIT_TRAIL_WRITE_MODE,
  5      DBMS_AUDIT_MGMT.AUDIT_TRAIL_QUEUED_WRITE);
  6  END;
  7  /
 
PL/SQL procedure successfully completed.
 
--确认写入模式
SQL> SELECT PARAMETER_VALUE
  2  FROM DBA_AUDIT_MGMT_CONFIG_PARAMS
  3  WHERE PARAMETER_NAME = 'AUDIT WRITE MODE';
 
PARAMETER_VALUE
-------------------------------------------------
QUEUED WRITE MODE
4. 统一审计结果无法写入时的处理
注意队列写入模式图的右下角的处理部分

正如文章最开始提到的,当无法向数据库写入统一审计结果时(如:数据库正在关闭或者变成了只读模式等),为了防止审计数据丢失,Oracle会把审计数据写入到 $ORACLE_BASE/audit/$ORACLE_SID/ora_audit_nn.bin文件中(nn为随机数值)。

当数据库恢复正常时,可以通过以下存储过程调用,把这些系统文件再导入到AUDSYS schema 下的CLI_SWP$XXXX统一审计的存储表中,导入后相应的文件会自动被删除

EXEC DBMS_AUDIT_MGMT.LOAD_UNIFIED_AUDIT_FILES;
※需要注意的是,当有大量存储文件时,利用Procedure向数据库导入统一审计结果,可能会影响DB性能。
————————————————
版权声明:本文为CSDN博主「Hehuyi_In」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Hehuyi_In/article/details/100765237

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值