1.2208.0
SQLE Release Notes
SQL审核工具 SQLE 1.2208.0 已经发布。以下对新版本的 Release Notes 进行详细解读。
文章主要分为以下三部分内容:
一、SQLE 项目介绍
二、新版本主要功能总结
三、完整的release信息
一、SQLE 项目介绍
爱可生开源社区的 SQLE 是一款面向数据库使用者和管理者,支持多场景审核,支持标准化上线流程,原生支持 MySQL 审核且数据库类型可扩展的 SQL 审核工具。
如何获取:
类型 | 地址 |
---|---|
版本库 | 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. 智能扫描支持阿里云RDS MySQL慢日志扫描
SQLE的智能扫描新增“阿里RDS MySQL慢日志”类型任务,支持阿里云RDS MySQL的慢日志扫描。SQLE通过定时调用阿里云提供的DescribeSlowLogRecords接口(查看慢日志明细接口)拉取慢日志,可参考阿里云文档:https://help.aliyun.com/document_detail/26289.html,任务启动时第一次拉取为全量拉取(全量拉取将覆盖任务原有的慢日志记录),全量拉取的时间范围由用户决定,之后为增量拉取。
2. 新增部分MySQL 审核规则
- 禁止使用TIMESTAMP字段
- 添加字段不带AFTER, FIRST
- IN的值必须少于 N 个
- SELECT 不能有ORDER BY
- 建表必须含创建时间字段,且默认值为CURRENT_TIMESTAMP
- 建表必须含更新时间字段,且默认值为CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
3. 开放企业版MySQL规则到社区版本
随着SQLE产品迭代,目前产品形态逐渐丰富,最近几个版本也新增了许多企业版功能,因此后续会陆续开放部分企业版的功能。本次将所有企业版MySQL规则开放给社区,规则列表如下:
- 别名不要与表或列的名字相同
- 修改表的默认字符集不会改表各个字段的字符集
- 删除列为高危操作
- 删除主键为高危操作
- 删除外键为高危操作
- 不建议使用没有通配符的 LIKE 查询
- IN (NULL)/NOT IN (NULL) 永远非真
- 尽量不要使用IN
- 引号中的字符串开头或结尾包含空 语句中使用了中文全角引号
- 不建议使用 ORDER BY RAND()
- 不建议对常量进行 GROUP BY
- ORDER BY 语句对多个不同条件使用不同方向的排序无法使用索引
- 不建议ORDER BY 的条件为表达式
- 建议将过长的SQL分解成几个简单的SQL
- 不建议使用 HAVING 子句
- 删除全表时建议使用 TRUNCATE 替代 DELETE
- 不要 UPDATE 主键
- 表中包含有太多的列
- 建议列与表使用同一个字符集
- 整型定义建议采用 INT(10) 或 BIGINT(20)
- VARCHAR 定义长度过长
- 应避免在 WHERE 条件中使用函数或其他运算符
- 不建议使用 SYSDATE() 函数
- 使用 SUM(COL) 时需注意 NPE 问题
- 主键中的列过多
- 未使用 ORDER BY 的 LIMIT 查询
- 请谨慎使用TRUNCATE操作
- 使用DELETE/DROP/TRUNCATE等操作时注意备份
- 发现常见 SQL 注入函数
- 请使用'<>’代替’!=’
- 不推荐使用子查询
- 子查询不支持LIMIT
- 表的初始AUTO_INCREMENT值不为0
4. SQLE OceanBase for MySQL 新增了部分审核规则【企业版】
我们为 OceanBase for MySQL 新增了6条特定的审核规则,规则的选型来自于OceanBase 的官方文档:https://open.oceanbase.com/docs/observer-cn/V3.1.3/0000000000316888
- 库名长度不能超过指定字节
- 数据库对象名英文字母不推荐混用大小写
- 建表后不允许添加主键
- 不建议使用json类型
- 禁止创建名为 test 或以 test 开头的库
- 禁止使用或操作 oceanbase 库和 test 库
5. SQLE 新增了报表统计页面【企业版】
新增的报表统计页面可以让用户方便地查看SQLE平台当前的工单、数据源、License使用情况等相关状态信息。
6. SQLE PostgreSQL 审核插件支持SQL分析【企业版】
在之前的MySQL 审核中,我们新增了SQL 下钻分析的功能, 新版本中PostgreSQL插件也支持了该功能。
SQLE会提供SQL分析报告界面,提供执行计划信息,如下图所示:
SQLE会自动识别SQL的库表信息,并展示字段、索引的详细信息,如下图:
7. MySQL 审核场景化改造兼容事后审核模式
SQLE的SQL审核在设计之初是为了满足SQL上线的审核,随着产品发展,我们支持了多场景下的事前事后审核。本次版本进行了两个方面的更新,1. 在智能扫描的任务中,我们支持用户配置规则模版来达到同一个数据源在不同的场景下使用不同的规则力度;2. SQLE提供规则配置的方式实现区分不同审核场景,可以开启“停用上线审核模式”来给规则模版关闭上线审核模式。开启此规则后, SQLE会开启事后审核模式, 不再进行上线的校验,如已执行过的新增列的语句进行审核时会检测出列已存在, 在停用上线审核模式后此项检查将会被忽略。
产品体验
创建智能扫描任务场景下的规则模版,模版的规则可按需添加(也可从现有规则模版 clone),并且启用“停用上线审核模式”规则,如下图所示
创建或者修改扫描任务时,通过自定义审核规则模版来选择上述创建的适配事后审核的规则模版即可:
三、完整的release信息
Release Notes
特性:
- PostgreSQL 审核插件支持SQL分析【企业版】;
- OceanBase for MySQL 审核插件添加部分审核规则【企业版】;
- [#723] 新增报表统计页面【企业版】;
- [#755] 智能扫描支持指定特定的规则模版;
- [#716] MySQL 审核场景化改造兼容事后审核模式;
- [#734] 新增部分MySQL审核规则;
- [#784] 智能扫描支持阿里云rds mysql慢日志扫描;
- [#777] 开放企业版MySQL规则到社区版。
优化:
- [#698] 工单名称默认在页面上使用自动生成工单号;
- [#712] 创建的扫描任务的审核周期建议默认设置久一点,防止未设置的情况下每秒都审核;
- [#761][#757][#752] 报表统计功能细节优化【企业版】;
- [#789] 工单列表界面待操作人列展示优化;
- [#778] 智能扫描任务列表的任务名称上提供一个标识,可以快速知道点击这里查看任务详情。
缺陷修复
- [#717] 修复绑定了流程模板的用户无法被删除问题,即使流程模版已经删除;
- [#731] 将SQLE所有用双引号包裹字符串的得放改为单引号,因为某些情况下双引号包裹的内容可能会被当作标识符而非字符串;
- [#736] /v1/instance_tips [get] 指定实例类型时会报错;
- [#708] 修复MySQL审核时,某些特定语句触发字段不存在的误判的问题;
- [#773] 修复开启全局配置中的“在 DML 语句中预计影响行数超过指定值则不回滚”审核SQL导致服务崩溃的问题;
- [#758] 修复审核规则“必须使用指定数据库字符集”导致panic的问题;
- [#722] SQLE后端库不再记录邮箱配置的明文密码;
- [#806] 修复创建扫描任务的时候不指定规则模版,提交报错的问题;
- [#802] 修复admin的dashboard展示需要上线个数为1,点开tab,展示暂无数据的问题;
- [#809] 修复使用select sleep(1)语句进行审核导致sqle崩溃的问题;
- [#799] 审核任务已经改成扫描任务,修改对应的权限名称。