故事的开始我们要从一段 SQL 说起……

SELECT p.patient_id, p.first_name, p.last_name, d.diagnosis_name

FROM patients p

JOIN diagnoses d ON p.patient_id = d.patient_id

WHERE d.diagnosis_name = 'Heart Disease'

AND d.diagnosis_date BETWEEN '2023-01-01' AND '2023-12-31'

ORDER BY p.last_name, p.first_name;

这是小明在业务中涉及到的常规 SQL 语句,在他看来,这个语句编写工整、逻辑清晰,没有什么问题。但在提交 DBA 审核时,对方给出了诸多优化点:

表的diagnosis_name和diagnosis_date字段是否有索引?如果只需要患者 ID 和姓名,但查询中包含了diagnosis_name,这个字段是否是冗余字段?jion操作是否是最优的?如果last_name和first_name字段没有被索引,并且数据量很大,那么排序操作可能会非常耗时。如果排序不是必需的,能否移除ORDER BY子句?如果预期返回的结果集非常大,能否添加分页逻辑,减少单次查询返回的数据量?

这其实就是我们日常业务的现实缩影。开发者对技术能力良莠不齐,DBA 对数据库知识存在局限性,众多的程序员难免引入一个个或初级或高端的 SQL 隐患,而 SQL 编写不当是引起数据库故障的一个重要原因,轻则影响数据库性能,重则可能直接导致「雪崩」。

因此,在企业内部引入 SQL 审核工具成了一个自然而然的选择,构建一套规范化、流程化的 SQL 审核体系至关重要。

对于 SQL 审核来说,其核心能力主要是两点:

成为一种自助服务,让开发同学不再依赖 DBA 的人工审核;专注于 SQL 规范的审核。

让 SQL 审核成为一种自助服务,开发人员可以实时获得关于其 SQL 语句性能的反馈,无需等待 DBA 空闲时间或排队等待审核,大大缩短开发周期,提升整体工作效率。同时,DBA 则能从繁琐重复的审核任务中解放出来,专注于更高级别的数据库优化和管理任务。

专注于 SQL 规范审核则主要体现在确保 SQL 质量、预防安全风险和统一标准这三个方面。确保每一条 SQL 语句都符合最佳实践,包括使用合适的索引、避免全表扫描、优化查询结构等,提升查询效率;预防 SQL 注入等安全风险,防止潜在的数据泄漏或篡改;同时确保团队使用统一的 SQL 编写标准,增强代码可读性和可维护性。

在此基础上,如果把 SQL 审核纳入正式的业务流程中,比如在数据变更流程中加入自动 SQL 审核,这样就能进一步提升数据操作的规范性和安全性,一旦 SQL 语句未通过审核,数据变更将无法提交,直至 SQL 语句修改至符合既定标准和规范。这样就能进一步预防潜在的数据错误和安全风险,达到 1+1>2 的效果。

在 CloudQuery 中加入 SQL 审核功能就能达到这样 1+1>2 的效果。

在权限模块,可以通过「高危操作设置」,将 drop、alter、create 等 DDL 操作纳入权限管控范围,避免一部分人直接进行这种高危操作。而在权限范围内的,可通过规则管理,将这些 SQL 规则直接生效于目标连接。

CloudQuery 的 SQL 审核规则涵盖了 DDL 规范、DML规范、使用建议、索引规范和命名规范五个方面。

DDL 规范是业务最基础的需求,如创建、修改和删除表、视图、触发器等对象。CloudQuery 通过 DDL 规范确保数据库结构的合理性和一致性,避免由于不规范的 DDL 操作导致的数据标准或结构混乱。DML 规范更多的是基于对 SQL 性能和影响范围的考虑。

此外,CloudQuery 还提供了使用建议,这些建议基于最佳实践和性能优化原则,这些建议包括禁止创建自定义函数、子查询不支持 LIMIT 等。

索引规范是 SQL审核规则中的另一个重要方面。索引是数据库性能优化的关键,合理的索引设计可以显著提高查询速度。CloudQuery 通过索引规范确保索引的创建、使用和维护都符合规范,避免过度索引或缺失索引导致的性能问题。

命名规范则是确保数据库对象命名的统一性和可读性。

SQL 审核在 CloudQuery 平台中拥有广泛的应用场景,常见的比如 SQL 编辑窗口和数据变更流程。

这些不同的使用场景,往往需要依据具体需求来灵活调整审核规则。例如,在SQL编辑窗口中,我们可能需要重点关注 SQL 语句的语法正确性、性能优化以及潜在的安全风险;而在数据变更流程中,则可能更加注重数据的一致性和完整性。通过 SQL 审核,我们可以根据实际需求,自定义审核规则的严格程度,以适应不同数据源和场景的需求。

说了这么多,大家可能发现目前的 CloudQuery 还没有搭载以上描述的完整的 SQL 审核功能。

3月26日,CloudQuery 社区版 2.10.0,SQL 审核功即将上线!

SQL 审核作为 CloudQuery 企业版的一大特色功能,自上线以来收获了很多用户的好评。作为一个开放共享的社区,我们决定将此功能推向社区,让更多热爱CloudQuery的小伙伴们都能体验到企业级的高效与便捷,希望SQL审核功能为大家带来新的惊喜与收获。

我们深知,社区是产品茁壮成长的摇篮,是每一个用户心声的汇聚之地。因此,我们也热切期待社区的小伙伴们能够踊跃发言,提出宝贵的建议与意见,与我们携手共建一个更加强大的CloudQuery。

3月26日,我们不见不散~

推荐链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: