以下是对 OceanBase 数据库 SQL 审计功能 的优化整理,旨在提升其结构清晰度和完整性。


OceanBase 数据库 SQL 审计功能概述

OceanBase 数据库提供了强大的 SQL 审计功能,支持展示所有执行的 SQL 语句并按 DDL、DML 类型分类记录。该功能适用于 MySQL 模式Oracle 模式,并支持详细的审计日志管理。以下是全面的支持能力和配置方式。

1. 审计功能总览

特性 是否支持 适用模式 适用版本 工具/视图
展示所有执行的 SQL 语句 ✔️ 支持 MySQL / Oracle 模式 ≥ 4.0.0 GV$OB_SQL_AUDIT
按 DDL/DML 类型分类 ✔️ 支持 MySQL / Oracle 模式 ≥ 4.0.0 GV$OB_SQL_AUDIT
审计日志持久化 ⚠️ 内存表 所有模式 ≥ 4.0.0 需配合日志或 OCP
Oracle 模式审计策略 ✔️ 支持 Oracle 模式 企业版 AUDIT 命令 + DBA_AUDIT_TRAIL
MySQL 模式审计过滤 ✔️ 支持 MySQL 模式 ≥ 4.2.0 AUDIT_LOG_FILTER_* 函数
全链路 SQL 追踪 ✔️ 支持 所有模式 ≥ 4.2.3 select last_trace_id()

2. 核心机制:GV$OB_SQL_AUDIT 视图

OceanBase 4.0.0 版本 起,系统引入了 GV$OB_SQL_AUDIT 视图,作为统一的 SQL 执行跟踪工具,适用于 MySQL 模式和 Oracle 模式。此视图能够展示所有 OBServer 节点上的 SQL 执行信息。

功能说明
  • 作用:展示所有 SQL 请求的完整执行信息。

  • 特点

    • 包含 客户端 IP租户执行时间等待事件SQL 文本 等信息。
    • 支持 跨节点聚合(适合集群环境)。
    • 非系统租户只能查看本租户的 SQL 记录。
关键字段(用于分类查询)
字段名 含义 示例
QUERY_SQL 原始 SQL 语句 SELECT * FROM t1;
COMMAND_TYPE SQL 命令类型(数字编码) 30: SELECT, 31: INSERT, 43: CREATE
ELAPSED_TIME 总耗时(微秒) 123456
CLIENT_IP 客户端 IP 地址 192.168.1.100
USER_NAME 执行用户 test@tenant1
SQL_ID SQL 唯一标识 自动生成的哈希值

COMMAND_TYPE 编码遵循 Oracle 兼容标准,常见类型包括:

  • DML:30(SELECT), 31(INSERT), 32(UPDATE), 33(DELETE)
  • DDL:43(CREATE TABLE), 44(DROP TABLE), 45(ALTER TABLE), 46(TRUNCATE)

3. 示例查询

  • 按 DDL 类型查询:查询最近 1 小时内所有 DDL 操作(如创建、删除、修改表):
SELECT 
    QUERY_SQL,
    USER_NAME,
    CLIENT_IP,
    ELAPSED_TIME,
    TO_CHAR(EXECUTE_TIME, 'YYYY-MM-DD HH24:MI:SS') AS EXEC_TIME
FROM GV$OB_SQL_AUDIT
WHERE COMMAND_TYPE IN (43, 44, 45, 46)  -- DDL 类型
  AND EXECUTE_TIME >= SYSDATE - INTERVAL 1 HOUR
ORDER BY EXECUTE_TIME DESC;
  • 统计 DML 类型执行次数
SELECT 
    CASE COMMAND_TYPE
        WHEN 30 THEN 'SELECT'
        WHEN 31 THEN 'INSERT'
        WHEN 32 THEN 'UPDATE'
        WHEN 33 THEN 'DELETE'
        ELSE 'OTHER'
    END AS SQL_TYPE,
    COUNT(*) AS EXEC_COUNT,
    AVG(ELAPSED_TIME) AS AVG_TIME_US
FROM GV$OB_SQL_AUDIT
WHERE COMMAND_TYPE BETWEEN 30 AND 33
GROUP BY COMMAND_TYPE;

4. MySQL 模式审计函数

4.2.0 版本 起,MySQL 模式支持通过以下审计函数实现 SQL 审计过滤和追踪。

函数 用途
AUDIT_LOG_FILTER_SET 设置审计日志过滤器

这些函数允许通过用户级别过滤进行精细化管理,支持更细粒度的审计操作。


5. 审计日志持久化与日志分析

审计日志存储
  • 注意:审计记录并未存储在数据库内部表中,而是写入系统日志文件。日志内容包含:

    • 操作时间戳
    • 用户名
    • 操作类型(如 CREATE TABLE)
    • 执行的 SQL 语句
    • 客户端 IP 地址
    • 成功/失败状态

日志路径通常为 $OB_HOME/log/observer.log 或单独的审计日志文件。

日志分析与可视化
  • 建议:使用日志分析工具(如 ELKGrafana Loki)进行结构化解析与监控。

6. 企业版与社区版差异

  • 企业版:支持完整的 SQL 审计功能,包括通过 GV$OB_SQL_AUDIT 视图和日志文件进行 SQL 分类和追踪。
  • 社区版:不支持 SQL 审计功能,无法使用上述视图和功能,只能通过代理日志等方式进行有限的 SQL 跟踪。

7. 结论与优化建议

  • SQL 审计功能:OceanBase 企业版提供全面的 SQL 审计功能,适用于大多数生产环境。
  • 日志存储与分析:审计日志不存储在数据库内,而是通过系统日志持久化,建议结合外部日志分析工具进行实时监控和数据提取。
  • 版本限制:该功能在 OceanBase 4.0.0 及以上版本提供,MySQL 模式和 Oracle 模式都支持审计,但需要 企业版 才能启用完整功能。

通过精确配置审计功能,可以有效地跟踪和分类 SQL 执行,满足合规性要求和性能分析需求。

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐