为什么很多团队上了 SQL 审核,数据库变更管理仍然容易出现偏差?

0 阅读7分钟

这两年跟不少团队聊数据库治理,一个比较常见的现象是:

大家并不是完全没流程。很多公司已经上了 Yearning、Archery 这类 SQL 审核工具,生产变更也要求“先提单、后执行”。按理说,数据库变更应该比以前更可控。

但现实往往不是这样。到了生产环境,DBA 还是会遇到这些问题:

• SQL 审核是走了,但有人还是会在客户端里改生产;

• 审批流是配了,但审批和执行是两套系统,中间还是靠人传递;

• 规范是有了,但更多停留在提醒层面,难以限制高风险 SQL 执行;

• 业务库一多,审批人、负责人、权限关系就开始混乱;

• 出现问题后,还是要 DBA 去整理日志、翻记录、核对沟通记录。

所以问题不在于“有没有 SQL 审核”,而在于很多团队把 SQL 审核当成了数据库治理的终点,但它其实只是起点。

1. SQL 审核的作用边界

先说结论

SQL 审核很重要,但它解决的只是数据库治理里的一部分问题。它主要解决的是两件事:

• 第一,变更动作从“人工执行”变成“先审核再执行”;

• 第二,把明显有风险的 SQL 在提交阶段先拦一遍。

这一步当然有价值。很多团队从“所有人拿客户端连接生产库”过渡到“先走审核”,已经能显著减少异常变更。

但 DBA 需要面对的,是更复杂的现实。数据库变更管理出现偏差,很多时候不是因为 SQL 本身有多复杂,而是因为整条链路没有闭环。审核工具只看到了其中一段,而 DBA 需要覆盖的是整个过程。

2. 为什么仍会出现偏差

2.1 执行入口

这是比较常见的问题。很多团队确实要求“生产变更先提审核”,但生产库权限依然会发给研发、测试或者运维。同一个人既可以提审核,也可以在 Navicat、DBeaver 里连接生产库。

这时候 SQL 审核就变成了一种“推荐流程”,而不是“强制流程”。只要执行入口没有统一收口,任何流程都可能被绕开。

DBA 更关注的,其实不是没有制度,而是制度存在,但平台层面没有约束力。

2.2 审批与执行

还有一种情况更隐蔽。有些团队流程看起来比较清晰:

• 开发提交 SQL,审批人审批,随后由 DBA 执行。

问题在于,审批系统和执行系统是分离的。审批过后,SQL 可能会复制到聊天群、贴到工单里,也可能由 DBA 再复制到客户端中执行。

这意味着什么?意味着审批和执行之间仍然存在“人工跳转”。中间只要复制错、执行错、漏了一条、用了错误环境,风险就会重新出现。

从 DBA 视角,这类问题比较麻烦,因为它不是单一工具缺陷,而是流程链路断开导致的系统性问题。

2.3 权限模型与责任边界

很多数据库异常,不是因为 SQL 审核没做,而是因为谁能看、谁能改、谁该审批,这些事情本身就没理顺。

常见情况包括:

• 同一个账号被多人共用;

• 离职、转岗后权限没有及时回收;

• 测试和生产权限边界不清;

• 审批人写死在流程里,业务一调整就得人工改;

• 数据库越来越多以后,没人说得清每个库到底归谁负责。

一旦权限模型和责任边界混乱,SQL 审核再严格,也只是补一层表面控制。

3. DBA 关注点

很多非 DBA 角色看数据库变更,关注点通常是“能不能发布成功”。

但 DBA 看问题的方式完全不一样。

DBA 更关心的是:

• 谁发起的;

• 谁审批的;

• 在哪个环境执行的;

• 执行前有没有规则校验;

• 执行后有没有清晰留痕;

• 如果出现问题,能不能快速定位和回滚。

所以 DBA 对平台的要求,天然不是“多一个审核功能”,而是要有一整套可追踪、可限制、可回溯的机制。

如果没有这层机制,SQL 审核再完善,也很容易沦为“流程存在,但风险照旧”。

4. 变更闭环

做了几年 DBA 以后,我越来越觉得,数据库治理不能只盯着“审核”这个动作,而要看整条链路有没有闭合。

一个相对清晰的闭环,至少应该包括:

1. 统一数据库访问入口,而不是人人连接生产库;

2. 把 SQL 规范预检前置,而不是靠人工审核;

3. 把审批和执行放到同一个链路里,而不是审批通过后再人工转发;

4. 把高风险 DDL/DML 在生产环境做强约束,而不是只靠提醒;

5. 把权限、角色、Owner、环境边界理清楚

6. 把审计、追踪、回滚能力补齐,确保出现问题后能查、能控、能恢复。

只有做到这一步,SQL 审核才算纳入数据库 DevOps 体系,而不是独立挂在外面。

NineData DevOps 产品架构图:SQL 审核只是中间一环,数据库治理更需要把前后链路打通。

5. NineData 的能力组合

最近看 NineData 的数据库 DevOps 设计,我觉得其中有一点比较值得 DBA 参考:

它不是只想做一个 SQL 审核工具,而是在补“审核前后缺掉的那些环节”。

NineData数据库DevOps:www.ninedata.cloud/sqldev

NineData 支持通过开发规范限制生产环境 SQL 窗口中的 DDL/DML。这个动作的意义在于,它解决的是“审核入口有了,但执行入口没收口”的长期问题。

NineData 可以通过规则限制生产库 SQL 窗口中的 DDL / DML,让高风险操作转成 SQL 任务,再经过规范预检和审批流程执行。

创建 SQL 任务并完成审批

再比如它的审批流支持按 Data Owner 自动匹配负责人。这个设计对于数据库少的团队感知不强,但一旦业务库多起来,价值就很明显。审批人不再需要写死在每条流程里,人员变动时维护成本也低很多。

1. 登录 NineData 账户,单击账户管理 > 角色管理,然后单击新建角色,创建两个角色:

2. 单击目标角色,然后单击数据源权限页签,并单击添加数据源权限,分别为新建的两个角色添加不同数据源的权限:

它覆盖的不只是 SQL 审核,还包括:

• SQL 规范预检; 审批流程; 角色权限与 SSO; 敏感数据保护; 审计日志; Online DML; 数据追踪与回滚; 慢 SQL 分析; 批量变更、导入导出、跨库查询等。

这类平台更有价值的地方,不是“比 Yearning 多几个按钮”,而是它更接近 DBA 需要的生产治理闭环。

6. 总结

如果你的团队现在还处在下面这种状态:

• SQL 审核平台负责审 SQL;

• 客户端负责连接数据库和执行;

• 工单系统负责审批记录;

• 群聊负责通知和催办;

• DBA 负责在这些系统之间人工补位;

• 那数据库变更管理出现偏差,并不罕见。

因为你们虽然上了 SQL 审核,但并没有建立数据库变更闭环。审核只是一个点,而不是一套机制。而数据库治理要解决的是“这条 SQL 能不能在正确的人、正确的流程、正确的环境里,以可审计、可追踪、可回滚的方式执行”。

对 DBA 来说,更有价值的,也不是再加一个工具,而是把数据库访问、规范、审批、执行、安全、审计收进一套平台里,让生产变更从“靠经验补位”变成“靠机制约束”。