欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

新添SQLE功能:针对MySQL的SQL审核规则升级与扩展

最编程 2024-07-23 12:57:02
...

1.2208.0-pre3

SQLE Release Notes

SQL审核工具 SQLE 1.2208.0-pre3 于今天发布。以下对新版本的 Release Notes 进行详细解读。

注:本次升级为预览版本,仅可用新功能试用,不保证平滑升级

文章主要分为以下三部分内容:

一、SQLE 项目介绍

二、新版本主要功能介绍

三、完整的 release 信息

一、SQLE 项目介绍

爱可生开源社区的 SQLE 是一款面向数据库使用者和管理者,支持多场景审核,支持标准化上线流程,原生支持 MySQL 审核且数据库类型可扩展的 SQL 审核工具。

SQLE 获取

类型

地址

版本库

https://github.com/actiontech/sqle

文档

https://actiontech.github.io/sqle-docs-cn/

发布信息

https://github.com/actiontech/sqle/releases

数据审核插件开发文档

https://actiontech.github.io/sqle-docs-cn/3.modules/3.7_auditplugin/auditplugin_development.html

社区版在线体验

http://demo.sqle.actionsky.com 超级管理员:admin,密码:admin。

企业版在线体验

http://demo.sqle.actionsky.com:8889用户:admin,密码:admin。

二、新版本主要功能介绍

1. 新增部分 MySQL 审核规则

(1) 禁止使用TIMESTAMP字段

背景:TIMESTAMP 有2038年限制 并且时区转换。

(2)添加字段不带AFTER, BEFOR

背景:带AFTER 的DDL 会COPY 整表。

(3)IN的值必须少于 N 个

背景:DECIMAL性能不高。

(4)ELECT 不能有ORDER BY

背景:ORDER BY 对MYSQL性能影响大,不太好优化,可以把排序前置到后端,前端,客户端。

(5)建表必须含字段 CREATE_TIME且默认值为CURRENT_TIMESTAMP 和 建表必须含字段 UPDATE_TIME,且默认值为CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

背景:规范表的记录创建更新的使用,避免后期对数据生命周期管理不便

2. MySQL 审核场景化改造兼容事后审核模式

目前,SQLE的SQL审核在设计之初是为了满足SQL上线的审核,随着产品发展,我们支持了多场景下的事前事后审核。目前存在2个问题:

(1).无法在不同场景下使用不同的审核规则。数据源在SQLE流程内通过绑定规则模版进行审核,数据源目前只支持绑定一个模版,在任何场景下(上线,智能扫描)都使用这一个模版进行审核,此时会导致一个规则模版无法满足所有场景的需要,部分规则在设计之初只要是限制SQL上线的,在部分智能扫描的场景里(慢日志扫描,库表审核等)都是已经上线后的SQL,不应该进行SQL上线的限制。例如建表必须添加if not exists,防止上线失败。参考:https://github.com/actiontech/sqle/issues/558;还有部分规则对完整的SQL审核有效,但是对脱敏的sql 类似“sql指纹”无效,例如:mybatis 的扫描,tidb审计日志的扫描对应的sql都脱敏了,因此无法进行”预检查“的规则和一些依赖explain的规则 ,参考:https://github.com/actiontech/sqle/issues/466。因此,在智能扫描的任务中,我们支持用户配置规则模版来达到同一个数据源在不同的场景下使用不同的规则力度。

(2).目前的SQL 审核对不同场景审核的兼容性不友好。SQLE的SQL审核在设计之初是为了满足SQL上线的审核,通过上下文关联和基础对象验证满足上线SQL的正确性校验,这些在事后审核的场景下过于严格且审核的SQL是已执行过的(慢日志的SQL),导致部分SQL给出了不合理的建议,例如某扫描任务中扫描到 create table的SQL,此时如果对create table进行连库审核,必然触发表已存在的审核建议。因此,SQLE提供规则配置的方式实现区分不同审核场景,可以开启“停用上线审核模式”来给规则模版关闭上线审核模式。开启此规则后, SQLE会开启事后审核模式, 不再进行上线的校验,如已执行过的新增列的语句进行审核时会检测出列已存在, 在停用上线审核模式后此项检查将会被忽略。

产品体验

创建智能扫描任务场景下的规则模版,模版的规则可按需添加(也可从现有规则模版 clone),并且启用“停用上线审核模式”规则,如下图所示:

创建或者修改扫描任务时,通过自定义审核规则模版来选择上述创建的适配事后审核的规则模版即可:

三、完整的release信息

Release Notes

特性

  • [#755] 智能扫描支持指定特定的规则模版;
  • [#716] MySQL 审核场景化改造兼容事后审核模式;
  • [#734] 新增部分MySQL审核规则;
    • 禁止使用TIMESTAMP字段
    • 添加字段不带AFTER, BEFOR
    • IN的值必须少于 N 个
    • ELECT 不能有ORDER BY
    • 建表 必须含字段 CREATE_TIME且默认值为CURRENT_TIMESTAMP
    • 建表 必须含字段 UPDATE_TIME, 且默认值为CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

优化

  • [#761 ][#757][#752] 报表统计功能细节优化【企业版】;

缺陷修复

  • [#708] 修复MySQL审核时,某些特定语句触发字段不存在的误判的问题 。

推荐阅读