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. 混合模式审计和纯统一审计之间的差异
模式 |
特征 |
启用 |
混合模式审核 |
既有传统审计,也有统一审计;可以使用统一审计工具和传统的审计工具 |
启用任何统一审计策略。无需重新启动数据库。 |
纯统一审计 |
只有统一审计;只能使用统一审计工具 |
以 |
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_nameSQL> 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_nameSQL> 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 YESSQL> --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_POLICIES3 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_AUDITNAME TYPE VALUE------------------------------- --------- -----------unified_audit_sga_queue_size integer 1048576
查看统一审计相关参数
SQL> col Description format a26SQL> col Parameter format a30SQL> select a.ksppinm "Parameter",a.KSPPDESC "Description",2 b.ksppstvl "Value"3 from sys.x$ksppi a, sys.x$ksppcv b4 where a.indx = b.indx and a.ksppinm like '%unified_audit%';Parameter Description Value------------------------------ -------------------------- --------_unified_audit_policy_disabled Disable Default Unified Au FALSEdit Policies on DB Create unified_audit_sga_queue_size Size of Unified audit SGA 1048576Queue _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> BEGIN2 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_VALUE2 FROM DBA_AUDIT_MGMT_CONFIG_PARAMS3 WHERE PARAMETER_NAME = 'AUDIT WRITE MODE';PARAMETER_VALUE
-------------------------------------------------
IMMEDIATE WRITE MODE
--设定队列写入模式(Queued-write mode)
SQL> BEGIN2 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_VALUE2 FROM DBA_AUDIT_MGMT_CONFIG_PARAMS3 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性能。
参考
Introduction to Auditing
Configuring Audit Policies
Administering the Audit Trail
【Unified Auditing】Oracle 12c 统一审计基础介绍_SQLplusDB的博客-CSDN博客
https://blog.csdn.net/lukeunique/article/details/49531111
【Unified Auditing】统一审计的存储架构体系_SQLplusDB的博客-CSDN博客
Oracle审计篇——统一审计相关推荐
- Oracle审计篇——标准审计
一. 简介 1. 什么是标准审计 标准审计审计SQL语句.权限.对象和网络活动. 可以使用AUDIT语句配置标准审计,使用NOAUDIT语句删除此配置.可以将审计记录写入数据库审计跟踪或操作系统审计文 ...
- Oracle 统一审计(unified auditing)的概念
12c开始oracle引入了统一审计(unified auditing)的概念,统一审计默认是关闭的. 如果保持默认(关闭统一审计),传统的审计方式生效,将audit_trail设为none\os\d ...
- Oracle 12c统一审计
Oracle 12c统一审计 Oracle Database 12c 推出一套全新的审计架构,称为统一审计功能.统一审计主要利用策略和条件在 Oracle 数据库内部有选择地执行有效的审计.新架构将现 ...
- Oracle 20c 不再支持特性:传统审计不支持 统一审计(Unified Auditing)成主流
墨天轮原文:https://www.modb.pro/db/21964?ywm 在Oracle 20c 中,传统审计(Traditional Auditing)不再支持,统一审计(Unified Au ...
- oracle12c审计功能,oracle 12c开启关闭统一审计
--------------------开启统一审计------------------------------------------- SQL> conn /as sysdba SQL> ...
- oracle学习笔记之 审计
Oracle数据库审计 数据库审计是监视并记录选定的用户数据库操作.主要分为标准审计和精细粒度审计(FGA,Fine-Grained Auditing),标准审计可在语句级.对象级.权限级进行审计:精 ...
- linux 审计oracle,开启和关闭oracle数据库中的审计功能
开启和关闭oracle数据库中的审计功能 第1步:查看审计功能是否开启? SQL> show parameter audit; NAME TYPE VALUE ...
- Oracle fgs(精细审计)使用
Oracle fgs(精细审计)使用 1)grant execute on dbms_fga to scott 2)添加审计策略(scott) begin DBMS_FGA.ADD_POLICY( o ...
- 区块链安全100问 | 第七篇:智能合约审计流程及审计内容
零时科技--专注于区块链安全领域 深圳零时科技有限公司(简称:零时科技),公司成立于2018年11月,是一家专注于区块链生态安全的实战创新型网络安全企业,团队扎根区块链安全与应用技术研究,以丰富的安全 ...
最新文章
- 解决chrome浏览器us-yahoo.com搜索劫持
- 贝叶斯推断及其互联网应用(二):过滤垃圾邮件
- java内存优化详解_jvm堆内存优化详解
- 杭州南江机器人现在是否量产_传亚马逊正开发家庭机器人,高约1米可移动
- php生成图片水印,PHP生成图片加文字及图案水印办法
- 用JavaScript实现一个Timeline
- 分享PHP获取客户端IP的几种不同方式
- C#【多线程篇】BackgroundWorker类使用总结
- 腾讯云服务器无限流量,腾讯云服务器有流量限制吗,您看仔细了
- 国际反垃圾邮件组织有哪些?
- 城市信息学其二-城市人类动力学
- 青少年软件编程(Python)等级考试试卷一级(判断题)2021-9
- Grails in Action:完成啦
- 怎么计算一个月有多少天
- linux系统怎么连接显示器,Linux下笔记本外接显示器 · Eulerlee
- 学java双十一电脑推荐_双十一,有什么值得学生购买的电脑吗?
- radio男女选择取值
- C++中的tolower()函数与toupper()函数
- 中国在足球上不敌德国 但在这件事上却完全可以嘚瑟
- IOS m3u8格式视频流截图