面试宝典:介绍下Oracle数据库动态性能视图 V$UNIFIED_AUDIT_RECORD_FORMAT

Oracle V$UNIFIED_AUDIT_RECORD_FORMAT解析

在这里插入图片描述

🔐 深入解析 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_NAMEVARCHAR2(128)NO统一审计跟踪(UNIFIED_AUDIT_TRAIL)中的列名。例如:SQL_TEXT, DBUSERNAME, ACTION_NAME, OBJECT_SCHEMA 等。这是查询审计数据时直接在 SELECT 语句中使用的名称。
POSITIONNUMBERNO该列在内部审计记录格式中的逻辑位置序号。主要用于Oracle内部管理。
DATA_TYPEVARCHAR2(128)NO该列的数据类型。例如:VARCHAR2, NUMBER, TIMESTAMP WITH TIME ZONE, CLOB, BLOB。这对于正确解析和过滤数据至关重要。
DATA_LENGTHNUMBERYES数据类型的长度(适用于字符和原始数据类型)。例如,VARCHAR2(128)DATA_LENGTH 是 128。
DATA_PRECISIONNUMBERYES数字数据类型的精度(适用于NUMBER类型)。
DATA_SCALENUMBERYES数字数据类型的小数位数(适用于NUMBER类型)。
NULLABLEVARCHAR2(1)YES该列是否允许为空YN
COLUMN_IDNUMBERYES列的ID。为了向后兼容而保留。
AUDIT_TYPEVARCHAR2(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 内核中定义统一审计格式的内部数据结构。
  • 工作原理
    1. 当发生一个可审计的事件时(例如,用户执行了 SELECT ON salary_table),Oracle 会根据配置的审计策略生成一条审计记录。
    2. 这条记录在结构上符合 V$UNIFIED_AUDIT_RECORD_FORMAT 所定义的格式。但并非所有列都会被填充,只有与特定审计事件相关的列才会有值。
    3. 最终,这条记录被写入底层存储(如 AUDSYS 模式下的表),并可通过 UNIFIED_AUDIT_TRAIL 视图查询到。
    4. 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. 关键知识点总结

  1. 元数据视图:**VUNIFIEDAUDITRECORDFORMAT∗∗是一个∗∗元数据视图∗∗。它描述数据(审计记录)的结构,而不是数据本身。这是它与之前讨论的‘VUNIFIED_AUDIT_RECORD_FORMAT** 是一个**元数据视图**。它描述数据(审计记录)的结构,而不是数据本身。这是它与之前讨论的 `VUNIFIEDAUDITRECORDFORMAT是一个元数据视图。它描述数据(审计记录)的结构,而不是数据本身。这是它与之前讨论的VUNDOSTAT` 等动态性能视图的根本区别。
  2. 统一审计的核心:它是理解和有效使用 UNIFIED_AUDIT_TRAIL 视图的关键。在查询审计数据时,应始终参考此视图以确认列名和数据类型。
  3. 静态内容:该视图的内容是静态的,由 Oracle 版本决定。只有在 Oracle 数据库软件升级时,才可能添加新的审计列。
  4. 性能与存储:统一审计记录默认写入 AUDSYS 模式下的内部关系表。审计记录也可以直接写入操作系统文件,以减少对数据库性能的影响,但这需要特殊的配置。
  5. 策略驱动:统一审计是基于策略(Policy) 的。必须使用 CREATE AUDIT POLICY 语句创建策略,并使用 AUDIT POLICY <policy_name> 启用它,才会开始生成审计记录。仅仅启用传统审计参数(如 AUDIT_TRAIL)是不够的。
  6. 重要列:一些极其重要的审计列包括:
    • 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值