
🔐 深入解析 Oracle 19C 的 V$UNIFIED_AUDIT_RECORD_FORMAT 视图
1. 视图概述与核心作用
V$UNIFIED_AUDIT_RECORD_FORMAT 是一个静态的、只读的动态性能视图,它充当了统一审计(Unified Auditing)功能的“数据字典”。
- 核心作用:描述了存储在
UNIFIED_AUDIT_TRAIL视图中的所有可能的审计记录列(字段)及其属性。它定义了统一审计记录的完整架构。 - 关键问题它回答:
- 统一审计跟踪中可以记录哪些信息?
- 某个特定的审计信息(如
SQL_TEXT)在审计记录中对应的列名是什么?它的数据类型是什么? - 如何构建查询以准确地从
UNIFIED_AUDIT_TRAIL中提取我需要的审计信息?
它本身不包含任何审计数据,而是提供了理解和查询审计数据的元数据(Metadata)。
2. 核心字段详解
该视图的字段描述了UNIFIED_AUDIT_TRAIL中可能出现的列的特性。
| 字段名 | 数据类型 | 是否可为空 | 描述 |
|---|---|---|---|
| COLUMN_NAME | VARCHAR2(128) | NO | 统一审计跟踪(UNIFIED_AUDIT_TRAIL)中的列名。例如:SQL_TEXT, DBUSERNAME, ACTION_NAME, OBJECT_SCHEMA 等。这是查询审计数据时直接在 SELECT 语句中使用的名称。 |
| POSITION | NUMBER | NO | 该列在内部审计记录格式中的逻辑位置序号。主要用于Oracle内部管理。 |
| DATA_TYPE | VARCHAR2(128) | NO | 该列的数据类型。例如:VARCHAR2, NUMBER, TIMESTAMP WITH TIME ZONE, CLOB, BLOB。这对于正确解析和过滤数据至关重要。 |
| DATA_LENGTH | NUMBER | YES | 数据类型的长度(适用于字符和原始数据类型)。例如,VARCHAR2(128) 的 DATA_LENGTH 是 128。 |
| DATA_PRECISION | NUMBER | YES | 数字数据类型的精度(适用于NUMBER类型)。 |
| DATA_SCALE | NUMBER | YES | 数字数据类型的小数位数(适用于NUMBER类型)。 |
| NULLABLE | VARCHAR2(1) | YES | 该列是否允许为空。Y 或 N。 |
| COLUMN_ID | NUMBER | YES | 列的ID。为了向后兼容而保留。 |
| AUDIT_TYPE | VARCHAR2(64) | NO | 该列所适用的审计记录类型。指示该列信息会在哪种类型的审计事件中被填充。常见值: - Standard Audit: 标准审计记录 - Fine-Grained Audit: 细粒度审计记录 - SYSLOG: SYSLOG 审计记录 - ALL: 适用于所有类型的审计记录 |
3. 工作原理与底层机制
3.1 统一审计(Unified Auditing)简介
从 Oracle 12c 开始,统一审计引入了一种新的审计架构,它将之前分散的审计跟踪(标准审计、细粒度审计、DBMS_FGA、SYSDBA审计等)合并到一个单一、统一的视图中:UNIFIED_AUDIT_TRAIL。
- 优点:管理更简单(通过
CREATE AUDIT POLICY),性能更好(审计记录可暂存于SGA的队列中,由专用进程写入),数据更全面。
3.2 V$UNIFIED_AUDIT_RECORD_FORMAT 的角色
此视图的本质是统一审计模式的蓝图。它的数据是静态的,由 Oracle 数据库软件预定义。
- 底层源:其信息来源于 Oracle 内核中定义统一审计格式的内部数据结构。
- 工作原理:
- 当发生一个可审计的事件时(例如,用户执行了
SELECT ON salary_table),Oracle 会根据配置的审计策略生成一条审计记录。 - 这条记录在结构上符合 V$UNIFIED_AUDIT_RECORD_FORMAT 所定义的格式。但并非所有列都会被填充,只有与特定审计事件相关的列才会有值。
- 最终,这条记录被写入底层存储(如
AUDSYS模式下的表),并可通过UNIFIED_AUDIT_TRAIL视图查询到。 - DBA 或安全管理员在编写审计查询时,参考 V$UNIFIED_AUDIT_RECORD_FORMAT 来了解有哪些字段可用、它们叫什么名字、以及是什么类型。
- 当发生一个可审计的事件时(例如,用户执行了
3.3 与 UNIFIED_AUDIT_TRAIL 的关系
V$UNIFIED_AUDIT_RECORD_FORMAT:是元数据。描述“容器”的结构(有哪些字段)。UNIFIED_AUDIT_TRAIL:是数据。是放在“容器”里的实际内容(审计记录本身)。
4. 主要应用场景
4.1 探索和了解可用的审计信息
在编写复杂的审计查询之前,先查看有哪些字段可用。
-- 查看UNIFIED_AUDIT_TRAIL中所有可能的列
SELECT column_name, data_type, nullable, audit_type
FROM v$unified_audit_record_format
ORDER BY column_name;
-- 查找与SQL相关的审计列
SELECT column_name, data_type
FROM v$unified_audit_record_format
WHERE column_name LIKE '%SQL%'
ORDER BY column_name;
-- 查找所有适用于标准审计的列
SELECT column_name, data_type
FROM v$unified_audit_record_format
WHERE audit_type IN ('Standard Audit', 'ALL')
ORDER BY column_name;
4.2 构建准确且高效的审计查询
根据元数据信息,编写类型正确、过滤有效的查询语句。
-- 示例:查询最新的登录成功和失败事件
-- 参考V$UNIFIED_AUDIT_RECORD_FORMAT,我们知道相关列名和类型
SELECT
event_timestamp,
dbusername,
client_program_name,
action_name,
return_code,
os_username,
userhost,
unified_audit_policies
FROM unified_audit_trail
WHERE action_name IN ('LOGON', 'LOGOFF')
AND event_timestamp > SYSDATE - 1 -- 查询过去24小时
ORDER BY event_timestamp DESC;
-- 示例:查询对特定表的DML操作
SELECT
event_timestamp,
dbusername,
action_name, -- 如:INSERT, UPDATE, DELETE
object_schema,
object_name,
sql_text
FROM unified_audit_trail
WHERE object_name = 'SALARY'
AND object_schema = 'HR'
ORDER BY event_timestamp DESC;
5. 相关视图与关联查询
| 视图名称 | 描述 | 常用关联字段 |
|---|---|---|
| UNIFIED_AUDIT_TRAIL | 核心视图。提供对所有统一审计记录的用户访问。 | V$UNIFIED_AUDIT_RECORD_FORMAT.COLUMN_NAME 是该视图中的实际列名。 |
| AUDIT_UNIFIED_POLICIES | 显示系统中创建的所有统一审计策略。 | 审计策略名称可通过 UNIFIED_AUDIT_TRAIL.UNIFIED_AUDIT_POLICIES 关联。 |
| AUDIT_UNIFIED_ENABLED_POLICIES | 显示已启用的统一审计策略。 | 同上。 |
常用综合查询:生成审计报告框架
-- 此查询并非直接关联,而是利用格式视图来帮助构建审计查询
-- 1. 首先,找到你感兴趣的审计列
SELECT column_name, data_type
FROM v$unified_audit_record_format
WHERE column_name IN ('EVENT_TIMESTAMP', 'DBUSERNAME', 'ACTION_NAME', 'OBJECT_NAME', 'SQL_TEXT', 'RETURN_CODE')
ORDER BY column_name;
-- 2. 然后,使用这些列构建你的审计报告
COLUMN event_timestamp FORMAT A30
COLUMN dbusername FORMAT A15
COLUMN action_name FORMAT A20
COLUMN object_name FORMAT A20
COLUMN sql_text FORMAT A50
SELECT
event_timestamp,
dbusername,
action_name,
object_name,
CASE WHEN action_name = 'LOGON' AND return_code != 0 THEN 'FAILED LOGON'
ELSE SUBSTR(sql_text, 1, 100)
END AS sql_text
FROM unified_audit_trail
WHERE event_timestamp > SYSDATE - 7 -- 过去一周
AND (action_name IN ('LOGON') OR object_name = 'EMPLOYEES')
ORDER BY event_timestamp DESC;
6. 关键知识点总结
- 元数据视图:**VUNIFIEDAUDITRECORDFORMAT∗∗是一个∗∗元数据视图∗∗。它描述数据(审计记录)的结构,而不是数据本身。这是它与之前讨论的‘VUNIFIED_AUDIT_RECORD_FORMAT** 是一个**元数据视图**。它描述数据(审计记录)的结构,而不是数据本身。这是它与之前讨论的 `VUNIFIEDAUDITRECORDFORMAT∗∗是一个∗∗元数据视图∗∗。它描述数据(审计记录)的结构,而不是数据本身。这是它与之前讨论的‘VUNDOSTAT` 等动态性能视图的根本区别。
- 统一审计的核心:它是理解和有效使用
UNIFIED_AUDIT_TRAIL视图的关键。在查询审计数据时,应始终参考此视图以确认列名和数据类型。 - 静态内容:该视图的内容是静态的,由 Oracle 版本决定。只有在 Oracle 数据库软件升级时,才可能添加新的审计列。
- 性能与存储:统一审计记录默认写入
AUDSYS模式下的内部关系表。审计记录也可以直接写入操作系统文件,以减少对数据库性能的影响,但这需要特殊的配置。 - 策略驱动:统一审计是基于策略(Policy) 的。必须使用
CREATE AUDIT POLICY语句创建策略,并使用AUDIT POLICY <policy_name>启用它,才会开始生成审计记录。仅仅启用传统审计参数(如AUDIT_TRAIL)是不够的。 - 重要列:一些极其重要的审计列包括:
EVENT_TIMESTAMP:事件发生的时间戳(含时区)。ACTION_NAME:执行的操作(如SELECT,LOGON,LOGOFF)。SQL_TEXT:执行的 SQL 语句文本(CLOB 类型)。DBUSERNAME:执行操作的数据库用户名。OBJECT_SCHEMA/OBJECT_NAME:被操作的对象。RETURN_CODE:操作的返回码(非零通常表示失败)。UNIFIED_AUDIT_POLICIES:触发此审计记录的策略名称。
总之,V$UNIFIED_AUDIT_RECORD_FORMAT 是任何使用 Oracle 统一审计功能的 DBA 或安全顾问的必备参考指南。在编写任何审计查询之前,先查阅此视图可以避免错误并提高效率。
欢迎关注我的公众号《IT小Chen》
Oracle V$UNIFIED_AUDIT_RECORD_FORMAT解析
722

被折叠的 条评论
为什么被折叠?



