基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
SQL 审计分析与规则审核(analyze sql)
更新时间:2026-07-23 16:36:01
本文适用于独立部署 obdiag 的场景。obdiag analyze sql 从集群 SQL 审计视图(如 OceanBase 数据库 V4.x 的 GV$OB_SQL_AUDIT)中按时间范围拉取 SQL,对每条语句执行内置 SQL Review 规则分析,并生成 HTML 或 JSON 报告,便于批量发现高风险写法、全表扫描、大 IN 列表等问题。
需要确保已在 config.yml 中配置集群 sys 租户连接信息,用于查询审计与租户元数据。若要以业务租户身份访问审计视图,可使用 --user 等选项指定租户信息。config.yml 配置说明参见 obdiag 配置。
说明
- 依赖集群已开启并可查询 SQL 审计相关视图;不同 OceanBase 数据库版本视图名可能不同,obdiag 会按版本选择合适查询。
- 未指定
--tenant_name时,会从系统租户可访问的租户列表中依次拉取各租户的审计数据(行为以当前版本实现为准)。指定--tenant_name则只分析对应租户。
使用说明
obdiag analyze sql [options]
选项说明如下:
| 选项名 | 是否必选 | 数据类型 | 默认值 | 说明 |
|---|---|---|---|---|
| --tenant_name | 否 | string | 默认为空 | 只分析指定租户的 SQL 审计;不指定则按实现遍历可访问租户。 |
| --user | 否 | string | 默认为空 | 业务租户用户,用于连接执行 SQL 审计查询;格式可为 user@tenant、user@tenant#cluster 或 cluster:tenant:user。不指定则使用 config.yml 中配置的 sys 租户信息连接。 |
| --password | 否 | string | 空 | 与 --user 配合时的密码。 |
| --host | 否 | string | 默认为空 | 与 --user 同时使用时,指定连接 SQL 审计的地址;默认取 config.yml 中的 obcluster.db_host。 |
| --port | 否 | string | 默认为空 | 与 --user 同时使用时,指定端口;默认取 config.yml 中的 obcluster.db_port。 |
| --from | 否 | string | 默认为空 | 时间范围起点,格式:yyyy-mm-dd hh:mm:ss。与 --to 成对使用。 |
| --to | 否 | string | 默认为空 | 时间范围终点,格式:yyyy-mm-dd hh:mm:ss。 |
| --since | 否 | string | 30m | 相对当前时间的时间范围,格式同其它 analyze 命令,如 1h、30m。未与 --from/--to 组合时参与计算默认窗口。 |
| --elapsed_time | 否 | string | 100000 | 仅保留执行耗时(微秒)不低于该阈值的 SQL,用于聚焦较慢语句。 |
| --limit | 否 | string | 2000 | 每个租户从审计中最多拉取的行数上限。 |
| --level | 否 | string | notice | 规则告警级别过滤,可选值为 critical、warn、notice、ok。 |
| --output | 否 | string | html | 生成的报告格式,可选值为 html 或 json。 |
| --store_dir | 否 | string | 当前目录 | 报告生成后所在目录;每次运行会在其下创建 obdiag_analyze_sql_<from>_<to>_<时间戳>/,内含 result.html 或 result.json。 |
| -c | 否 | string | ~/.obdiag/config.yml |
配置文件路径。 |
| --inner_config | 否 | string | 默认为空 | obdiag 自用配置,--inner_config key=value。 |
| --config | 否 | string | 默认为空 | 集群配置,格式为 --config key=value,可多次指定。支持指定的配置可参见 obdiag 配置。 |
| --config_password | 否 | string | 默认为空 | 使用加密配置文件时的解密密码。具体介绍可参见 配置文件加密。 |
| -h/--help | 否 | - | - | 查看帮助。 |
| -v/--verbose | 否 | - | - | 详细日志。 |
规则说明
内置审核规则包括但不限于:全表扫描风险、多表关联、SELECT *、大 IN 列表、IS NULL 使用注意、UPDATE/DELETE 无 WHERE 或恒真条件、算术运算在谓词中的风险等。具体规则集以 obdiag 源码中 sql/rules/review 为准,随版本迭代可能增减。
使用示例
使用配置文件(默认最近 30 分钟)
obdiag analyze sql
指定时间范围与租户
obdiag analyze sql \
--from "2026-04-01 10:00:00" \
--to "2026-04-01 12:00:00" \
--tenant_name mytenant \
--output html
业务租户连接审计、仅看近 1 小时且输出 JSON
obdiag analyze sql \
--since 1h \
--user appuser@mytenant \
--password '***' \
--output json \
--store_dir ./reports
无配置文件(开箱即用)
obdiag analyze sql \
--since 2h \
--config db_host=xx.xx.xx.xx \
--config db_port=2881 \
--config tenant_sys.user=root@sys \
--config tenant_sys.password=***
与 sql_review 的区别
| 命令 | 数据来源 | 典型用途 |
|---|---|---|
obdiag analyze sql |
集群在线 SQL 审计 | 按时间段批量审核线上真实 SQL。 |
obdiag analyze sql_review |
本地 SQL 文件/目录 | 离线审核脚本、迁移 SQL、CI 中的静态检查。 |
obdiag tool sql_syntax |
单条 SQL + EXPLAIN | 快速校验能否解析/出计划(不执行原语句),具体可参见 SQL 语法校验工具。 |
obdiag analyze sql_review 的具体介绍可参见 SQL 文件审核(analyze sql_review)。