导读:本期聚焦于美园和花创作的《Oracle数据库统一审计Unified Auditing如何配置与使用?》,敬请观看详情。Oracle Database 12c 引入统一审计框架后,传统AUDIT语句、细粒度审计和操作系统审计被整合为策略化模型,审计记录统一写入只读视图UNIFIED_AUDIT_TRAIL。本文从启用状态检查入手,说明如何通过V$OPTION和audit_trail参数判断当前审计模式,再演示CREATE AUDIT POLICY创建敏感表访问策略、LOGON失败登录策略以及DDL审计策略的具体SQL写法,并解释AUDIT POLICY、NOAUDIT POLICY和ALTER AUDIT POLICY的生效方式。随后介绍查询统一审计线索时的关键字段筛选方法,以及使用DBMS_AUDIT_MGMT包进行归档和清理的步骤。最后梳理配置中常见的误区和性能建议。全文以实践配置为主线,适合数据库管理员快速落地统一审计。

Oracle Database 从 12c 版本开始把标准审计、细粒度审计和操作系统审计整合到统一审计框架中,配置方式也从传统零散的 AUDIT 语句转变为策略化管理。统一审计不再把记录分散写入 SYS.AUD$ 或 FGA_LOG$,而是由 AUDSYS 架构统一管理,并通过只读视图 UNIFIED_AUDIT_TRAIL 对外展示。对数据库管理员来说,理解统一审计的启用状态、策略创建和线索查询,是把审计要求落到实处的关键。

Oracle数据库统一审计Unified Auditing如何配置与使用?

一、统一审计的启用状态检查与底层变化

统一审计并不是简单调整初始化参数就能开启的。Oracle Database 12c 及后续版本新建数据库时通常默认启用统一审计,但从早期版本升级上来的数据库可能仍然运行在传统审计模式或混合模式下。判断当前数据库是否真正启用了统一审计,最直接的方法是查询数据字典视图 V$OPTION

SELECT VALUE
FROM V$OPTION
WHERE PARAMETER = 'Unified Auditing';

如果上述查询返回 TRUE,说明统一审计组件已经启用,后续创建的审计策略可以直接生效。如果返回 FALSE,则说明数据库尚未启用统一审计,此时即便执行 CREATE AUDIT POLICY,也可能无法达到预期效果。需要注意的是,初始化参数 AUDIT_TRAIL 只负责控制传统审计行为,它取值 DB、OS 或 NONE 对统一审计没有决定作用,许多管理员误以为设置 AUDIT_TRAIL=DB 就是启用了统一审计,这是常见误解。

对于确实需要从传统审计切换到统一审计的环境,可以在关闭数据库后,在操作系统命令行执行 Oracle 二进制重新链接。Linux 或 Unix 平台的操作示例如下。

cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk uniaud_on ioracle ORACLE_HOME=$ORACLE_HOME

执行完成后重新启动数据库实例,再查询 V$OPTION 确认状态已经变为 TRUE。统一审计启用后,审计记录的底层存储和上报渠道都会切换到 AUDSYS,原来通过 DBA_AUDIT_TRAIL 查询传统审计记录的思路也需要同步调整到 UNIFIED_AUDIT_TRAIL

二、创建和启用统一审计策略

统一审计的核心对象是审计策略。通过 CREATE AUDIT POLICY 可以把权限、对象动作、角色和条件判断组合在一个策略内,从而替代传统模式中逐条执行的 AUDIT 语句。以审计 HR.EMPLOYEES 表上的 SELECT 和 UPDATE 操作为例,可以创建如下策略。

CREATE AUDIT POLICY aud_hr_emp_access
ACTIONS SELECT ON hr.employees, UPDATE ON hr.employees
WHEN 'SYS_CONTEXT(''USERENV'', ''SESSION_USER'') NOT IN (''HR'')'
EVALUATE PER SESSION;

这个策略的含义是:当会话用户不是 HR 用户时,对 HR.EMPLOYEES 表执行 SELECT 或 UPDATE 操作将会被审计。WHERE 条件中使用 SYS_CONTEXT 获取当前会话用户,能够把审计范围限制在真正的外部访问上,减少内部维护操作产生的噪声。策略中的 EVALUATE PER SESSION 表示每个会话只判断一次条件,如果条件结果为假,则该会话后续操作不再重复判断,这样可以降低审计对系统性能的影响。

策略创建之后不会自动生效,必须显式执行 AUDIT POLICY 命令启用。最简单的启用方式是对所有用户生效。

AUDIT POLICY aud_hr_emp_access;

如果只需要审计某些指定用户,可以在启用时加上 BY 子句。还可以通过 WHENEVER SUCCESSFUL 或 WHENEVER NOT SUCCESSFUL 进一步过滤成功或失败的审计记录。

AUDIT POLICY aud_hr_emp_access BY scott, app_user WHENEVER SUCCESSFUL;

后续业务发生变化时,可以动态修改策略,而不需要先删除再重建。例如增加对 DELETE 操作的审计,直接使用 ALTER AUDIT POLICY 即可。

ALTER AUDIT POLICY aud_hr_emp_access
ADD ACTIONS DELETE ON hr.employees;

不再需要某个策略时,先停止审计再删除策略,避免出现已经失效却仍然占用空间或影响判断的情况。

NOAUDIT POLICY aud_hr_emp_access;
DROP AUDIT POLICY aud_hr_emp_access;

三、查询统一审计线索与清理归档

统一审计记录集中存放在 UNIFIED_AUDIT_TRAIL 只读视图中。该视图的字段比传统审计视图更丰富,既包含会话号、数据库用户名、操作名称,也包含对象属主、对象名、SQL 文本以及返回码等关键信息。实际排查问题时,通常先按策略名称或时间范围缩小结果集。

SELECT event_timestamp,
       dbusername,
       action_name,
       object_schema,
       object_name,
       sql_text,
       return_code
FROM unified_audit_trail
WHERE unified_audit_policies = 'AUD_HR_EMP_ACCESS'
ORDER BY event_timestamp DESC;

通过 RETURN_CODE 可以快速判断操作是否成功,例如返回 0 表示成功,非 0 表示失败。对于登录失败审计,ACTION_NAME 会显示 LOGON,结合 DBUSERNAMECLIENT_PROGRAM_NAME 可以定位异常访问来源。统一审计视图支持常规 SQL 过滤和分组统计,管理员可以根据实际需求灵活组合查询条件。

审计记录会持续增长,如果不做清理,AUDSYS 表空间可能不断扩大。Oracle 提供 DBMS_AUDIT_MGMT 包来管理审计线索的归档和清理。通常先设置最后归档时间,再执行清理,只删除已经归档过的记录。

BEGIN
  DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
    audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
    last_archive_time => SYSTIMESTAMP - INTERVAL '7' DAY
  );
  DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
    audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
    use_last_arch_timestamp => TRUE
  );
END;
/

上述逻辑表示只清理七天以前且已经归档的统一审计记录。生产环境应当把清理动作封装到数据库调度任务中定时执行,同时监控 AUDSYS 表空间使用率,避免因审计数据增长造成空间不足。

四、配置要点与常见误区

执行统一审计策略相关操作需要足够的权限。通常建议使用 AUDIT_ADMIN 角色,而不是直接依赖 DBA 权限完成所有审计配置。这样既满足职责分离要求,又能避免误操作对审计策略产生影响。创建策略时,最小权限原则同样适用,只审计业务明确要求的表和操作类型,不要因为省事而审计整库或所有动作。

另一个常见误区是策略创建后没有执行 AUDIT POLICY,导致很长一段时间内完全没有审计记录。还有一部分管理员在测试环境中看到策略生效,但生产环境是从旧版本升级而来,忘记检查 V$OPTION,最终造成审计漏配。要判断策略是否已经启用,可以查询 AUDIT_UNIFIED_ENABLED_POLICIES 视图。

SELECT policy_name,
       user_name,
       success,
       failure
FROM audit_unified_enabled_policies;

该视图会显示当前已经启用策略对应的用户范围以及成功和失败审计开关。通过比对策略清单和业务要求,可以及时发现策略遗漏或错误启用。对于临时审计需求,可以在需求结束后立即执行 NOAUDIT POLICY,避免产生大量无用记录。

统一审计的优势在于集中管理、策略化和条件化审计,但并不意味着它可以无限制使用。条件判断、SQL 文本捕获以及过宽的对象范围都会增加数据库开销。配置时应结合审计目标,选择 EVALUATE PER SESSIONEVALUATE PER STATEMENT,并根据实际安全要求决定是否启用成功或失败过滤。只有把启用状态检查、策略创建、记录查询和定期清理结合起来,才能形成一个稳定、可维护的 Oracle 统一审计体系。

Oracle统一审计Unified Auditing审计策略修改时间:2026-08-30 07:44:02

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。