SQL开发规范一览表
DBSC 提供 SQL 开发规范,方便在企业多人协作开发的场景下提供安全管控,确保企业数据库的安全。本文提供当前支持的 SQL 开发规范一览表,以及规范支持的数据源类型。
SQL Review
SQL Review
分类 |
规则名称 |
MySQL |
GaiaDB |
GaiaDB-X |
Redis |
列 |
限制自增列名字为 ID |
✔️ |
✔️ |
✔️ |
❌ |
限制自增列为无符号 |
✔️ |
✔️ |
✔️ |
❌ |
限制 CHAR 类型字段长度 |
✔️ |
✔️ |
✔️ |
❌ |
限制字段名大小写 |
✔️ |
✔️ |
✔️ |
❌ |
字段名不能是关键字 |
✔️ |
✔️ |
✔️ |
❌ |
限制列要有注释 |
✔️ |
✔️ |
✔️ |
❌ |
限制列要有默认值 |
✔️ |
✔️ |
✔️ |
❌ |
限制列不可空(NOT NULL) |
✔️ |
✔️ |
✔️ |
❌ |
限制列不能使用部分数据类型 |
✔️ |
✔️ |
✔️ |
❌ |
不能设置列的字符集 |
✔️ |
✔️ |
✔️ |
❌ |
不能设置列的校对集 |
✔️ |
✔️ |
✔️ |
❌ |
限制 VARCHAR 类型字段长度 |
✔️ |
✔️ |
✔️ |
❌ |
表(DDL) |
限制表字段的数量 |
✔️ |
✔️ |
✔️ |
❌ |
修改表字符集建议用 ALTER TABLE CONVERT 语法 |
✔️ |
✔️ |
✔️ |
❌ |
限制表字符集 |
✔️ |
✔️ |
✔️ |
❌ |
限制表校验规则 |
✔️ |
✔️ |
✔️ |
❌ |
限制表名大小写 |
✔️ |
✔️ |
✔️ |
❌ |
表名不能是关键字 |
✔️ |
✔️ |
✔️ |
❌ |
限制表必须注释 |
✔️ |
✔️ |
✔️ |
❌ |
表要有主键 |
✔️ |
✔️ |
✔️ |
❌ |
限制表不能使用外键 |
✔️ |
✔️ |
✔️ |
❌ |
OnlineDDL:大表结构变更风险检测 |
✔️ |
✔️ |
✔️ |
❌ |
表需要包含某些列 |
✔️ |
✔️ |
✔️ |
❌ |
限制表存储引擎 |
✔️ |
✔️ |
✔️ |
❌ |
限制建表自增初始值 |
✔️ |
✔️ |
✔️ |
❌ |
同一张表的多条 ALTER 语句建议合为一条 |
✔️ |
✔️ |
✔️ |
❌ |
数据库 |
限制库的字符集 |
✔️ |
✔️ |
✔️ |
❌ |
更新 |
UPDATE/DELETE 语句建议指定 WHERE 条件 |
✔️ |
✔️ |
✔️ |
❌ |
UPDATE/DELETE 语句不能有 ORDER BY 子句 |
✔️ |
✔️ |
✔️ |
❌ |
UPDATE 多表时检测 SET 的列是否指定表前缀 |
✔️ |
✔️ |
✔️ |
❌ |
UPDATE 语句不建议更新表上的“创建时间”列 |
✔️ |
✔️ |
✔️ |
❌ |
UPDATE 语句检测是否更新了主键 |
✔️ |
✔️ |
✔️ |
❌ |
UPDATE 语句建议更新表上的“修改时间”列 |
✔️ |
✔️ |
✔️ |
❌ |
UPDATE 语句检测 SET 多个列之间的分隔符( AND 非法) |
✔️ |
✔️ |
✔️ |
❌ |
UPDATE 语句检测表/字段是否存在 |
✔️ |
✔️ |
✔️ |
❌ |
UPDATE 语句检测是否更新了唯一键 |
✔️ |
✔️ |
✔️ |
❌ |
UPDATE/DELETE 语句必须使用索引 |
✔️ |
✔️ |
✔️ |
❌ |
限制 UPDATE/DELETE 单个语句总影响行数 |
✔️ |
✔️ |
✔️ |
❌ |
OnlineDML:大表数据变更风险检测 |
✔️ |
✔️ |
✔️ |
❌ |
对象 |
字段禁用 Zerofill 属性 |
✔️ |
✔️ |
✔️ |
❌ |
禁止事件相关操作 |
✔️ |
✔️ |
✔️ |
❌ |
禁止自定义函数相关操作 |
✔️ |
✔️ |
✔️ |
❌ |
禁止存储过程相关操作 |
✔️ |
✔️ |
✔️ |
❌ |
禁止触发器相关操作 |
✔️ |
✔️ |
✔️ |
❌ |
禁止视图相关操作 |
✔️ |
✔️ |
✔️ |
❌ |
索引 |
限制表索引数量 |
✔️ |
✔️ |
✔️ |
❌ |
索引需要设置名称 |
✔️ |
✔️ |
✔️ |
❌ |
限制普通索引名格式 |
✔️ |
✔️ |
✔️ |
❌ |
限制主键列必须自增 |
✔️ |
✔️ |
✔️ |
❌ |
限制主键包含列的个数 |
✔️ |
✔️ |
✔️ |
❌ |
限制主键列类型 |
✔️ |
✔️ |
✔️ |
❌ |
限制单个索引包含列的个数 |
✔️ |
✔️ |
✔️ |
❌ |
限制唯一索引名格式 |
✔️ |
✔️ |
✔️ |
❌ |
索引名称不允许重复 |
✔️ |
✔️ |
✔️ |
❌ |
写入 |
INSERT 语句字段名不能重复 |
✔️ |
✔️ |
✔️ |
❌ |
INSERT 语句字段列表和值列表要匹配 |
✔️ |
✔️ |
✔️ |
❌ |
INSERT 语句建议指定 INSERT 字段列表 |
✔️ |
✔️ |
✔️ |
❌ |
INSERT 语句不能为 NOT NULL 列插入 NULL 值 |
✔️ |
✔️ |
✔️ |
❌ |
INSERT 语句不建议使用 SYSDATE()函数 |
✔️ |
✔️ |
✔️ |
❌ |
限制 INSERT 语句一条 INSERT VALUES 的总行数 |
✔️ |
✔️ |
✔️ |
❌ |
INSERT 语句检测 INSERT 的表/字段是否存在 |
✔️ |
✔️ |
✔️ |
❌ |
查询 |
SELECT 时不建议 GROUP BY 常量 |
✔️ |
✔️ |
✔️ |
❌ |
限制 SELECT 语句多表关联的数量 |
✔️ |
✔️ |
✔️ |
❌ |
SELECT 语句建议包含 WHERE 条件 |
✔️ |
✔️ |
✔️ |
❌ |
限制 SELECT 语句 LIMIT 的 OFFSET 大小 |
✔️ |
✔️ |
✔️ |
❌ |
SELECT 语句不建议对不同的表 GROUP BY 或 ORDER BY |
✔️ |
✔️ |
✔️ |
❌ |
SELECT 语句不建议对常量进行 ORDER BY |
✔️ |
✔️ |
✔️ |
❌ |
SELECT 语句不建议 ORDER BY 多个字段使用不同方向排序 |
✔️ |
✔️ |
✔️ |
❌ |
SELECT 语句不建议使用 ORDER BY RAND() |
✔️ |
✔️ |
✔️ |
❌ |
SELECT 语句不建议使用 HAVING 子句 |
✔️ |
✔️ |
✔️ |
❌ |
SELECT 语句不建议使用 UNION |
✔️ |
✔️ |
✔️ |
❌ |
限制 WHERE 条件中 IN 子句包含元素个数 |
✔️ |
✔️ |
✔️ |
❌ |
WHERE 条件中不建议使用前通配符查找 |
✔️ |
✔️ |
✔️ |
❌ |
WHERE 条件中不建议索引字段包含数学运算或函数运算 |
✔️ |
✔️ |
✔️ |
❌ |
WHERE 条件中不建议使用反向查询(NOT IN / NOT LIKE) |
✔️ |
✔️ |
✔️ |
❌ |
WHERE 条件中检测没有通配符的 LIKE 语句 |
✔️ |
✔️ |
✔️ |
❌ |
SELECT 语句不建议 GROUP BY 或 ORDER BY 表达式或函数 |
✔️ |
✔️ |
✔️ |
❌ |
SELECT 语句不建议使用 * |
✔️ |
✔️ |
✔️ |
❌ |
SELECT语句不建议嵌套多层子语句 |
✔️ |
✔️ |
✔️ |
❌ |
SELECT 语句必须使用索引 |
✔️ |
✔️ |
✔️ |
❌ |
查询/变更 |
WHERE 条件中检测字段是否存在隐式类型转换 |
✔️ |
✔️ |
✔️ |
❌ |
WHERE 条件中检测是否通过 OR 操作符连接过滤条件 |
✔️ |
✔️ |
✔️ |
❌ |
表 |
UPDATE/DELETE 语句检测 WHERE 条件是否包含子查询 |
✔️ |
✔️ |
✔️ |
❌ |
限制 UPDATE/DELETE 语句 LIMIT 数据量大小 |
✔️ |
✔️ |
✔️ |
❌ |
UPDATE/DELETE 语句检测多表关联语法是否完整(JOIN 遗漏 ON 子句) |
✔️ |
✔️ |
✔️ |
❌ |
限制 UPDATE/DELETE 语句多表关联的数量 |
✔️ |
✔️ |
✔️ |
❌ |
SQL 窗口
SQL 窗口
分类 |
规则名称 |
MySQL |
GaiaDB |
GaiaDB-X |
Redis |
权限 |
开启 SQL 窗口数据更新类型检查 |
✔️ |
✔️ |
✔️ |
❌ |
执行变更 SQL 校验影响行数提示 |
✔️ |
✔️ |
✔️ |
❌ |
开启 SQL 任务结构更新类型检查 |
✔️ |
✔️ |
✔️ |
❌ |
NoSQL 类型数据库 SQL 窗口支持命令 |
❌ |
❌ |
❌ |
✔️ |
SQL 任务 DDL 执行时间窗口 |
✔️ |
✔️ |
✔️ |
❌ |
SQL 任务 DML 执行时间窗口 |
✔️ |
✔️ |
✔️ |
❌ |
SQL 窗口 DQL 执行时间窗口 |
✔️ |
✔️ |
✔️ |
❌ |
WHERE 条件包含未授权敏感列 |
✔️ |
✔️ |
✔️ |
❌ |
NoSQL 类型数据库 SQL 任务支持命令
|
❌ |
❌ |
❌ |
✔️ |
拦截解析失败的SQL语句 |
✔️ |
✔️ |
✔️ |
✔️ |
数据安全 |
单次查询最大返回行数 |
✔️ |
✔️ |
✔️ |
❌ |
单次查询超时时间控制 |
✔️ |
✔️ |
✔️ |
❌ |
限制 SQL 窗口编辑结果集 |
✔️ |
✔️ |
✔️ |
❌ |
允许 SQL 窗口导出结果集 |
✔️ |
✔️ |
✔️ |
❌ |
SQL 任务
SQL 任务
分类 |
规则名称 |
MySQL |
GaiaDB |
GaiaDB-X |
Redis |
权限 |
SQL 任务执行人配置 |
✔️ |
✔️ |
✔️ |
❌ |
开启 SQL 任务数据更新类型检查 |
✔️ |
✔️ |
✔️ |
❌ |
开启 SQL 任务结构更新类型检查 |
✔️ |
✔️ |
✔️ |
❌ |
SQL 任务 DML 执行时间窗口 |
✔️ |
✔️ |
✔️ |
❌ |
SQL 任务 DDL 执行时间窗口 |
✔️ |
✔️ |
✔️ |
❌ |
SQL 任务资源并发控制 |
✔️ |
✔️ |
✔️ |
❌ |
数据安全 |
OnlineDDL 配置 |
✔️ |
✔️ |
✔️ |
❌ |
数据导出
数据导出
分类 |
规则名称 |
MySQL |
GaiaDB |
GaiaDB-X |
Redis |
权限 |
导出任务执行人配置 |
✔️ |
✔️ |
✔️ |
❌ |
限制访问来源 IP |
✔️ |
✔️ |
✔️ |
❌ |
数据安全 |
数据导出超时时间限制 |
✔️ |
✔️ |
✔️ |
❌ |
Excel文件增加数字水印 |
✔️ |
✔️ |
✔️ |
❌ |
导出行数限制 |
✔️ |
✔️ |
✔️ |
❌ |
数据导入
数据导入
分类 |
规则名称 |
MySQL |
GaiaDB |
GaiaDB-X |
Redis |
权限 |
导入任务执行人配置 |
✔️ |
✔️ |
✔️ |
❌ |
数据导入操作检查 |
✔️ |
✔️ |
✔️ |
❌ |
数据归档与清理
数据归档与清理
分类 |
规则名称 |
MySQL |
GaiaDB |
GaiaDB-X |
Redis |
数据安全 |
数据归档与清理配置 |
✔️ |
✔️ |
✔️ |
❌ |
数据追踪与回滚
数据追踪与回滚
分类 |
规则名称 |
MySQL |
GaiaDB |
GaiaDB-X |
Redis |
数据安全 |
数据追踪 Binlog 文件总的大小阈值配置(GB) |
✔️ |
✔️ |
✔️ |
❌ |