OceanBase 数据库 SQL 审计功能概述
OceanBase 数据库提供了强大的 SQL 审计功能,支持展示所有执行的 SQL 语句并按 DDL、DML 类型分类记录。该功能适用于。
·
目录标题
以下是对 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
或单独的审计日志文件。
日志分析与可视化
- 建议:使用日志分析工具(如 ELK、Grafana Loki)进行结构化解析与监控。
6. 企业版与社区版差异
- 企业版:支持完整的 SQL 审计功能,包括通过
GV$OB_SQL_AUDIT
视图和日志文件进行 SQL 分类和追踪。 - 社区版:不支持 SQL 审计功能,无法使用上述视图和功能,只能通过代理日志等方式进行有限的 SQL 跟踪。
7. 结论与优化建议
- SQL 审计功能:OceanBase 企业版提供全面的 SQL 审计功能,适用于大多数生产环境。
- 日志存储与分析:审计日志不存储在数据库内,而是通过系统日志持久化,建议结合外部日志分析工具进行实时监控和数据提取。
- 版本限制:该功能在 OceanBase 4.0.0 及以上版本提供,MySQL 模式和 Oracle 模式都支持审计,但需要 企业版 才能启用完整功能。
通过精确配置审计功能,可以有效地跟踪和分类 SQL 执行,满足合规性要求和性能分析需求。
更多推荐
所有评论(0)