SQL 审核工具深度体验(一): CloudDM vs Archery vs Yearning vs Bytebase
数据库变更是日常开发和运维里绕不开的活。为了降低线上环境出故障的风险,通常会配合工单系统来发布变更,这样流程可控,也能减少低级错误。市面上能选的工具不少,有开源的,也有商业化的。这次我挑了四款比较常见的:Yearning、Archery、Bytebase,还有 CloudDM,从工单场景出发做了一轮体验和横向对比,给大家一些参考。
测评方法
不同工具的功能侧重点不一样,如果各方面都测,反而看不出差别。所以我主要关注最常见的两个场景:业务上线和数据订正。测试用的版本主要是社区版/免费版。
业务上线
功能上线通常包括两部分:程序包和数据库脚本。程序包这块一般由 CI/CD 流程接管,这里不展开。数据库变更脚本经常包括一条或多条需要执行的 SQL 语句,以 DDL 为主。在这个场景下,我准 备了两个测试点:
- DDL 需要符合一定的规则;
- 工单里可以处理 DDL/DML 混合语句。
-- 添加表
create table biz_model (
id bigint NOT NULL AUTO_INCREMENT,
created_time datetime COMMENT 'Creation timestamp',
updated_time datetime COMMENT 'Last update timestamp',
content varchar(50) NOT NULL COMMENT 'biz body',
PRIMARY KEY (id)
);
-- 初始化数据
insert into biz_model (id, created_time, updated_time, content)
values (1, '2025-05-30 14:02:39', '2025-05-30 14:02:39', '... content1 ...' );
insert into biz_model (id, created_time, updated_time, content)
values (2, '2025-05-30 14:02:39', '2025-05-30 14:02:39', '... content2 ...' );
insert into biz_model (id, created_time, updated_time, content)
values (5275, '2025-05-30 14:02:39', '2025-05-30 14:02:39', '... content3 ...' );
-- 修改老表
alter table admin_user
add biz_id varchar(50) NOT NULL COMMENT 'biz id';
数据订正
数据订正也比较常见,有时候是有 bug,有时候是运维需要。重点是生产库不能停,在持续写入的情况下修改数据有一定概率会失败。因此在这个场景中,我准备了三个测试点:
- 订正需要修复的数据
- 出于某些原因, 数据订正语句可能会报错
- 批量化更新大量数据
-- 修复一条数据
update biz_model set content = 'abc' where id = 1;
-- 修复一条数据(模拟 SQL 报错)
update biz_model set content = null where id = 5275;
-- 批量更新数据
update admin_user set biz_id = 0 where created_time > '2025-01-01';
对比一览
先上对比表,直接看测试体验的结果:
| 分类 | 功能 | CloudDM | Archery | Yearning | Bytebase |
|---|---|---|---|---|---|
| 数据源 | 可管理的数据源 | 18 种 | 14 种 | 1 种 | 24 种 |
| 支持审核的数据源 | 18 种 | 3 种 | 1 种 | 7 种 | |
| 查询控制台 | ✔️ | ✔️ | ✔️ | ✔️ | |
| 工单递交 | DDL/DML 混合语句 | ✔️ | ✔️ | ✖️ | ✔️ |
| 分析查询计划 | ✖️ | ✔️ | ✔️ | ✔️ | |
| SQL 审核 | SQL 规则 | 60+ | 10+ | 40+ | 100+ |
| 自定义规则 | ✔️ | ✖️ | ✖️ | ✖️ | |
| 规则参数配置 | ✔️ | ✖️ | ✔️ | ✔️ | |
| 审核分级 | ✔️ | ✔️ | ✖️ | ✔️ | |
| 禁止递交问题工单 | ✔️ | ✔️ | ✔️ | ✔️ | |
| 提示所在行 | ✔️ | ✖️ | ✖️ | ✔️ | |
| SQL 审核结果回溯 | ✔️ | ✔️ | ✖️ | ✔️ | |
| 审批流程 | 内置审批 | ✔️ | ✔️ | ✔️ | 收费 |
| 自定义审批流 | ✖️ | ✔️ | ✔️ | 收费 | |
| 流程引擎 | 内置 钉钉 飞书 企业微信 | 内置 | 内置 | 内置 | |
| 工单执行 | 执行方式 | 立即/定时/手动 | 立即/定时/手动 | 立即/定时 | 立即/定时 |
| 事务模式 | 可选 | 不支持 | 不支持 | 默认(不可选) | |
| 工单调试 | ✔️ | ✖️ | ✖️ | ✖️ | |
| 工单失败后回滚方式 | 需要事务模式 | 生成语句 | 生成语句 | 事务 |
下面来具体聊聊每款产品的使用体验,主要围绕 工单递交、SQL 审核、审批流程与工单执行 这几个环节展开。
CloudDM
在 CloudDM 中,对数据库的操作分成三类:数据查询、CI/CD 和 工单。默认情况下,查询控制台只能执行查询语句,DDL/DML 需要通过工单才能执行。如果需要,也可以修改环境策略,让它成为一个 SQL 客户端。

创建工单
CloudDM 创建工单时,允许 DDL/DML 在同一个工单中混合使用。子账号如果在可视化操作过程中没有对应权限,系统会帮助用户快速创建对应的工单,方便继续走流程。


通过 修改环境策略,CloudDM 可以禁止环境中数据源的工单功能,在只提供查询的环境中,可以更好地保证数据库的安全。

SQL 审核
CloudDM 内置了 60 多条规则,并且基本适用于支持的 18 种数据源。比较极客的是,CloudDM 的所有规则全部使用特定的 DSL 语言来编写,并且支持自定义新的规则。这意味着除了内置规则之外,还可以根据自己特殊需要使用 DSL 编写个性化规则,免去二次开发的烦恼。

工单创建时,CloudDM 会自动检查 SQL,并明显地提示检查结果,标出问题 SQL 所在行。有多条语句的情况下,定位问题很快,改起来也方便。

在对工单进行 SQL 审核时,CloudDM 提供了两个安全级别。如果 SQL 命中了等级较高的 阻塞 级,就不能创建工单,只有 提示 级时可以选择强制递交工单。

审批流程
CloudDM 有一个内置简易审批程序,可以提供审批的基本功能,也可以对接 钉钉、飞书、企业微信作为外部审批流程引擎,完成复杂的审批流程。

工单执行
CloudDM 支持以事务方式执行工单,并提供 手动、立即、定时 三种执行模式。选择“已手动完成”意味着 DBA 可以自行处理工单,而不是完全交给系统。这在面对大型数据库或复杂 SQL 时更灵活,可以降低 DBMS 系统带来的不确定性。

CloudDM 支持工单调试功能,在“数据订正”场景里,即使遇到预设的报错,也可以人工介入处理,再继续执行后续 SQL,而不是简单地中断执行。

小结
亮点
- UI 交互和权限控制结合得不错,操作体验顺滑,也有安全管控措施。
- SQL 审核可以精确定位问题语句所在行,方便排错。
- 审批可以对接钉钉、飞书、企业微信,适合团队协作。
- 工单执行方式灵活(立即 / 定时 / 手动),还能选事务模式。
- 支持工单调试,执行的时候碰到错误 SQL 可以 人工介入后继续执行。
不足
- 在工单递交时没有整合查询计划信息。
- 回滚 SQL 需要手动补充,不够自动化。
Bytebase
Bytebase 在产品上有 SQL 编辑器、工单 两种模式。SQL 编辑器可以执行 SQL 语句,而工单用于管控变更发布。Bytebase 的设计中,数据库变更主要依托于 Git 的 CI/CD,同时也提供了页面递交工单。通过页面递交工单的入口在 CI/CD 中通过创建变更计划来实现,分为 Schema 变更、数据变更 两类。

创建工单
Bytebase 有两种创建工单的方式,一种基于可视化 UI 交互,另一种是纯 SQL 递交。通过 SQL 递交工单时 Bytebase 支持混合 DDL/DML 语句。

在 Bytebase 创建工单时,SQL 审核默认是非必须环节,即便工单中包含严重的 SQL 错误也可以正常递交工单。因此建议在安全策略中启用 “禁止提交包含错误告警的工单” 选项,防止不符合规范的 SQL 被递交。

SQL 审核
Bytebase 内置了 111 条审核规则,其中部分可以在不同数据源之间共用,用户可以在 7 种数据源下配置它们。

Bytebase 在递交工单时可以手动对 SQL 进行检查,需要先 “运行检查”,再点击“检查结果图标”,方可查看检查结果,结果中会显示问题 SQL 所在行。

需要注意的是,Bytebase 在进行 SQL 检测时使用自身存储的元信息数据。若在产品之外执行了 DDL 语句,会导致其内部存储的元信息和真实数据库不一致,这种不一致会进一步影响 Bytebase 功能可用性,例如 SQL 在检测环节出现幻觉。

审批流程
Bytebase 不支持外部流程引擎,但可以在内部定义审批流程。另外社区版不支持审批功能,需要购买企业版以解锁该功能。

