You need to enable JavaScript to run this app.
导航
安全规则管理
最近更新时间:2024.10.28 19:24:00首次发布时间:2023.10.16 11:21:21

本文介绍如何在数据库工作台 DBW 控制台管理安全规则。

背景信息

安全管控是为了保护数据库系统中的数据和资源而制定的规则和措施。该功能可以帮助您在 DBW 实现精细化管控数据库实例,例如免密登录实例、工单管理、安全规则管理等。更多信息,请参见安全规则集管理

前提条件

注意事项

  • 只有在数据交互台的 SQL 窗口或通过工单执行的 SQL 语句才会被拦截生效。

  • 安全规则集内开启的安全规则请勿出现冲突的情况,否则您的实例绑定的安全规则将失效。

  • 系统默认提供一个安全规则集即名称为 mysql default。默认的安全规则集和新建的安全规则集默认包含的安全规则,请参见参考文档

  • 一个基础规则可以由多个子规则组成,多个子规则按照顺序执行。

  • 系统规则不支持删除和修改仅支持修改和关闭;您自定义的安全规则在删除后不支持恢复,需谨慎操作。

  • 当前暂不支持自定义 SQL 审核的安全规则。关于系统提供的 SQL 审核规则请参见参考文档

创建安全规则

  1. 登录 DBW 控制台

  2. 在顶部菜单栏,选择地域。

  3. 在左侧导航栏,选择数据管理 > 安全规则

  4. 安全规则集页面,单击目标安全规则集操作列的查看

  5. 在目标安全规则集页面,单击创建规则

  6. 创建安全规则控制面板,配置以下参数信息。

    参数说明
    规则名称自定义安全规则名称。安全规则名称的长度不能超过 128 个字符,且不能为空。
    生效场景从下拉列表中选择安全规则的生效场景,支持选择数据交互台工单管理

    基础规则

    一个基础规则可以由多个子规则组成,多个子规则按照顺序执行。基础规则的具体配置如下:

    • 您可以根据因子固定值-字符固定值-数值固定值-布尔设置安全规则。

    • 在满足基础规则时,您可以为每个子规则设置是否允许该 SQL 类型在数据交互台执行或生成工单执行,生效场景不同,该设置也不同,具体如下:

      • 生效场景选择数据交互台时,支持选择禁止该 SQL 类型数据交互台执行允许该 SQL 类型数据交互台执行禁止该 SQL 类型数据交互台执行,调转工单执行

      • 生效场景选择工单管理时,支持选择禁止该 SQL 类型生成工单执行允许该 SQL 类型生成工单执行

    说明

    • 您可以添加无数个子规则。

    • 每个子规则最多可包含三个条件层级。

    默认规则

    按需选择是否开启默认规则。开启后在没有命中基础规则包含的所有子规则时,执行默认规则。生效场景不同,该设置也不同,具体如下:

    • 生效场景选择数据交互台时,支持选择禁止该 SQL 类型数据交互台执行允许该 SQL 类型数据交互台执行、禁止该 SQL 类型数据交互台执行,调转工单执行

    • 生效场景选择工单管理时,支持选择禁止该 SQL 类型生成工单执行允许该 SQL 类型生成工单执行

    规则预览在该区域展示您设置的规则生成的 SQL 语句,您无需修改。

启用或关闭安全规则

您可以根据需求启用或关闭安全规则集内的规则。

  1. 登录 DBW 控制台

  2. 在顶部菜单栏,选择地域。

  3. 在左侧导航栏,选择数据管理 > 安全规则

  4. 安全规则集页面,单击目标安全规则集操作列的查看

  5. 在目标安全规则集页面,单击目标规则是否启用列下的开关。

  6. 确定开启吗?确定关闭吗? 对话框,单击确定

编辑安全规则

系统规则不支持修改,仅支持修改您自定义的安全规则。

  1. 登录 DBW 控制台

  2. 在顶部菜单栏,选择地域。

  3. 在左侧导航栏,选择数据管理 > 安全规则

  4. 安全规则集页面,单击目标安全规则集操作列的查看

  5. 在目标安全规则集页面,单击目标规则操作列下的编辑

  6. 编辑配置项对话框,修改安全规则的规则。

删除安全规则

系统规则不支持删除,您自定义的安全规则在删除后不支持恢复,需谨慎操作。

  1. 登录 DBW 控制台

  2. 在顶部菜单栏,选择地域。

  3. 在左侧导航栏,选择数据管理 > 安全规则

  4. 安全规则集页面,单击目标安全规则集操作列的查看

  5. 在目标安全规则集页面,单击目标规则操作列的删除

  6. 确认删除对话框,单击确定

参考文档

安全规则集中默认的安全规则(即系统规则)如下表所示。

  • 数据交互台 & 工单管理
安全规则名称生效场景是否默认启用默认值
禁止 CREATE_TABLE 在数据库交互台直接执行,请提交工单执行。数据交互台启用
禁止 DROP_TABLE 在数据库交互台直接执行,请提交工单执行。数据交互台启用
禁止 TRUNCATE 在数据库交互台直接执行,请提交 DDL 工单执行。数据交互台启用
禁止 INSERT 在数据库交互台直接执行,请提交 DML 工单执行。数据交互台启用
禁止 UPDATE 在 SQL 控制台直接执行,请提交 DML 工单执行。数据交互台启用
禁止 DELETE 在 SQL 控制台直接执行,请提交 DML 工单执行。数据交互台启用
禁止 ALTER_TABLE 在数据库交互台直接执行,请提交 DDL 工单执行。数据交互台启用
禁止 KILL 在数据库交互台直接执行,请提交 DML 工单执行。数据交互台启用
禁止存储过程在数据库交互台直接创建,请提交 DDL 工单执行。数据交互台启用
禁止无法识别 SQL 解析异常继续执行【继续执行会导致安全规则失效】。数据交互台启用
禁止无法解析权限的 SQL 继续执行【继续执行会导致安全规则失效】。数据交互台启用
控制 SQL 库表权限校验。数据交互台启用
仅支持特定类型 SQL 执行。数据交互台未启用SHOW TABLES、SHOW CREATE TABLE、EXPLAIN、SELECT、DBATMAN HELP、DBATMAN SHOW
仅支持 select_type 在范围内的 SQL 执行。数据交互台未启用SIMPLE、PRIMARY、DERIVED、UNION、UNION RESULT、SUBQUERY、DEPENDENT SUBQUERY、MATERIALIZED、DEPENDENT UNION
仅支持 index_type 在范围内 SQL 执行。数据交互台未启用index、range、ref、eq_ref、const、system、NULL
仅支持 SQL 扫描行数小于 10 万行的语句执行,请优化 SQL 语句。数据交互台未启用100000
SELECT 语句建议指定 WHERE 条件。数据交互台未启用
限制 SELECT 语句 LIMITOFFSET 大小。数据交互台未启用2000
SELECT 时不建议 GROUP BY 常量。数据交互台未启用
限制 SELECT 语句多表关联的数量。数据交互台未启用3
SELECT 语句不建议使用 *数据交互台未启用
SELECT 语句不建议对不同的表 GROUP BYORDER BY数据交互台未启用
SELECT 语句不建议对常量进行 ORDER BY数据交互台未启用
SELECT 语句不建议 ORDER BY 多个字段使用不同方向排序。数据交互台未启用
SELECT 语句不建议 GROUP BY 表达式或函数。数据交互台未启用
SELECT 语句不建议 ORDER BY 表达式或函数。数据交互台未启用
SELECT 语句不建议使用 ORDER BY RAND()数据交互台未启用
SELECT 语句不建议使用 HAVING 子句。数据交互台未启用
SELECT 语句不建议使用 UNION数据交互台未启用
WHERE 条件中不建议使用前通配符查找。数据交互台未启用
WHERE 条件中不建议使用反向查询(NOT IN / NOT LIKE)。数据交互台未启用
WHERE 条件中检测是否通过 OR 操作符连接过滤条件。数据交互台未启用
WHERE 条件中检测没有通配符的 LIKE 语句。数据交互台未启用

表要有主键。

  • 工单管理

  • 数据交互台

未启用

表要有备注。

  • 工单管理

  • 数据交互台

未启用

表不能使用外键。

  • 工单管理

  • 数据交互台

未启用

限制表名大小写。

  • 工单管理

  • 数据交互台

未启用

  • Lower

  • upper

限制表存储引擎。

说明

仅支持在 CreateTable 时适用该规则。

  • 工单管理

  • 数据交互台

未启用

InnoDB

限制表使用分区设置。

说明

CreateTableAlterTable 时不限制该规则。

  • 工单管理

  • 数据交互台

未启用

表需要包含某些列。

说明

仅支持在 CreateTable 时适用该规则。

  • 工单管理

  • 数据交互台

未启用

限制表字符集。

说明

仅支持在 CreateTable 时适用该规则。

  • 工单管理

  • 数据交互台

未启用

utf8mb4

限制表校验规则。

说明

仅支持在 CreateTable 时适用该规则。

  • 工单管理

  • 数据交互台

未启用

utf8_general_ci、 utf8_bin、 utf8mb4_general_ci、 utf8mb4_bin

表名不能是关键字。

  • 工单管理

  • 数据交互台

未启用

analyze、add、all、alter、and、before、between、bigint、binary、blob、both、by、call、cascade、case、change、char、character、check、collate、column、condition、as、asc、asensitive、connection、constraint、continue、convert、create、cross、current_date、current_time、current_timestamp、current_user、cursor、database、databases、day_hour、day_microsecond、day_minute、day_second、dec、decimal、declare、default、delayed、delete、desc、describe、deterministic、distinct、distinctrow、div、double、drop、dual、each、else、exit、explain、false、fetch、float、float4、float8、elseif、enclosed、escaped、exists、for、force、foreign、from、fulltext、goto、grant、group、having、high_priority、hour_microsecond、hour_minute、hour_second、if、ignore、in、index、infile、inner、inout、insensitive、insert、int、int1、int2、int3、int4、int8、integer、interval、into、is、iterate、join、key、keys、kill、label、leading、leave、left、like、limit、linear、lines、low_priority、localtime、localtimestamp、lock、long、longblob、longtext、loop、load、matchediumblob、mediumint、mediumtext、middleint、minute_microsecond、minute_second、mod、modifies、no_write_to_binlog、null、numeric、on、optimize、option、optionally、natural、not、or、order、ut、uter、outfile、precision、primary、procedure、urge、raid0、ange、read、reads、eal、references、regexp、release、ename、epeat、replace、require、restrict、return、evoke、ight、rlike、schema、schemas、second_microsecond、select、sensitive、separator、set、show、smallint、spatial、specific、sql、sqlexception、sqlstate、sqlwarning、sql_big_result、sql_calc_found_rows、sql_small_result、ssl、starting、traight_join、able、terminated、then、tinyblob、inyint、tinytext、o、trailing、trigger、true、ndo、union、unique、nlock、unsigned、pdate、usage、use、using、utc_date、tc_time、tc_timestamp、values、varbinary、x509、xor、year_month、zerofill、varchar、varcharacter、varying、when、where、while、with、write

限制表索引的数量。

说明

仅支持在 CreateTable 时适用该规则。

  • 工单管理

  • 数据交互台

未启用

7

限制表字段的数量。

说明

仅支持在 CreateTable 时适用该规则。

  • 工单管理

  • 数据交互台

未启用

128

限制建表自增初始值。

  • 工单管理

  • 数据交互台

未启用

1

限制主键列必须自增。

说明

仅支持在 CreateTable 时适用该规则。

  • 工单管理

  • 数据交互台

未启用

字段名不能是关键字。

  • 工单管理

  • 数据交互台

未启用

analyze、add、all、alter、and、before、between、bigint、binary、blob、both、by、call、cascade、case、change、char、character、check、collate、column、condition、as、asc、asensitive、connection、constraint、continue、convert、create、cross、current_date、current_time、current_timestamp、current_user、cursor、database、databases、day_hour、day_microsecond、day_minute、day_second、dec、decimal、declare、default、delayed、delete、desc、describe、deterministic、distinct、distinctrow、div、double、drop、dual、each、else、exit、explain、false、fetch、float、float4、float8、elseif、enclosed、escaped、exists、for、force、foreign、from、fulltext、goto、grant、group、having、high_priority、hour_microsecond、hour_minute、hour_second、if、ignore、in、index、infile、inner、inout、insensitive、insert、int、int1、int2、int3、int4、int8、integer、interval、into、is、iterate、join、key、keys、kill、label、leading、leave、left、like、limit、linear、lines、low_priority、localtime、localtimestamp、lock、long、longblob、longtext、loop、load、match、mediumblob、mediumint、mediumtext、middleint、minute_microsecond、minute_second、mod、modifies、no_write_to_binlog、null、numeric、on、optimize、option、optionally、natural、not、or、order、out、outer、outfile、precision、primary、procedure、purge、raid0、range、read、reads、real、references、regexp、release、rename、repeat、replace、require、restrict、return、revoke、right、rlike、schema、schemas、second_microsecond、select、sensitive、separator、set、show、smallint、spatial、specific、sql、sqlexception、sqlstate、sqlwarning、sql_big_result、sql_calc_found_rows、sql_small_result、ssl、starting、straight_join、table、terminated、then、tinyblob、tinyint、tinytext、to、trailing、trigger、true、undo、union、unique、unlock、unsigned、update、usage、use、using、utc_date、utc_time、utc_timestamp、values、varbinary、x509、xor、year_month、zerofill、varchar、varcharacter、varying、when、where、while、with、write

限制字段名大小写。

  • 工单管理

  • 数据交互台

未启用

  • lower

  • upper

不能设置列的字符集。

  • 工单管理

  • 数据交互台

未启用

列要有注释。

  • 工单管理

  • 数据交互台

未启用

限制 CHAR 类型字段长度。

  • 工单管理

  • 数据交互台

未启用

256

限制 VARCHAR 类型字段长度。

  • 工单管理

  • 数据交互台

未启用

2560

限制列都不可空(not null)。

  • 工单管理

  • 数据交互台

未启用

限制自增列名字为 ID。

  • 工单管理

  • 数据交互台

未启用

限制自增列为无符号。

  • 工单管理

  • 数据交互台

未启用

不能使用 float/double 类型。

  • 工单管理

  • 数据交互台

未启用

每个列都要有默认值。

  • 工单管理

  • 数据交互台

未启用

不能设置列的校验集。

  • 工单管理

  • 数据交互台

未启用

不能使用 ENUM 类型(建议用 tinyint/char 代替)。

  • 工单管理

  • 数据交互台

未启用

字段未启用 Zerofill 属性。

  • 工单管理

  • 数据交互台

未启用

索引需要设置名字。

  • 工单管理

  • 数据交互台

未启用

限制 Unique 索引名格式。

  • 工单管理

  • 数据交互台

未启用

uk_\w+

限制普通索引名格式。

  • 工单管理

  • 数据交互台

未启用

idx_\w+

限制单个索引包含列的个数。

  • 工单管理

  • 数据交互台

未启用

5

限制主键包含列的个数。

说明

仅支持在 CreateTable 时适用该规则。

  • 工单管理

  • 数据交互台

未启用

2

限制主键列类型。

  • 工单管理

  • 数据交互台

未启用

int、bigint

限制列不能使用部分数据类型。

  • 工单管理

  • 数据交互台

未启用

索引中的字段要求设置为 not n``ull

说明

仅支持在 CreateTable 时适用该规则。

  • 工单管理

  • 数据交互台

未启用

  • SQL 审核
安全规则名称是否默认启用级别默认值

SQL 语法解析异常,建议检查 SQL 语句是否合法。

启用

  • 低:建议级别。

  • 中:警告级别。

  • 高:(默认等级)红线级别。

SELECT 语句建议指定 WHERE 条件。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

限制 UPDATE/DELETE 语句多表关联的数量

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

5

UPDATE/DELETE 语句检测多表关联语法是否完整(JOIN 遗漏 ON 子句)。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

UPDATE/DELETE 语句建议指定 WHERE 条件。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

INSERT 语句字段名不能重复。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

INSERT 语句字段列表和值列表要匹配

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

INSERT 语句建议指定 INSERT 字段列表。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

INSERT 语句不能为 NOT NULL 列插入 NULL 值。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

INSERT 语句不建议使用 SYSDATE() 函数。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

限制 INSERT 语句一条 INSERT VALUES 的总行数。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

1000

INSERT 语句检测 INSERT 的表/字段是否存在。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

UPDATE 多表时检测 SET 的列是否指定表前缀。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

UPDATE 语句不建议更新表上的“创建时间”列。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

  • create _time

  • create_at

UPDATE 语句建议更新表上的“修改时间”列。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

  • update_time

  • modify_time

  • update_at

  • modify_at

UPDATE 语句检测 SET 多个列之间的分隔符( AND 非法)。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

UPDATE/DELETE 语句检测 WHERE 条件是否包含子查询。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

限制 WHERE 条件中 IN 子句包含元素个数。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

UPDATE 语句检测是否更新了主键。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

UPDATE 语句检测 UPDATE 的表/字段是否存在。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

UPDATE 语句检测是否更新了唯一键。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

限制 SELECT 语句 LIMITOFFSET 大小。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

2000

SELECT 时不建议 GROUP BY 常量。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

限制 SELECT 语句多表关联的数量。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

3

SELECT 语句不建议使用 *

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

SELECT 语句不建议对不同的表 GROUP BYORDER BY

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

SELECT 语句不建议对常量进行 ORDER BY

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

SELECT 语句不建议 ORDER BY 多个字段使用不同方向排序。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

SELECT 语句不建议 GROUP BY 表达式或函数。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

SELECT 语句不建议 ORDER BY 表达式或函数。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

SELECT 语句不建议使用 ORDER BY RAND()

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

SELECT 语句不建议使用 HAVING 子句。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

SELECT 语句不建议使用 UNION

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

WHERE 条件中不建议使用前通配符查找。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

WHERE 条件中不建议使用反向查询(NOT IN / NOT LIKE)。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

WHERE 条件中检测是否通过 OR 操作符连接过滤条件。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

WHERE 条件中检测没有通配符的 LIKE 语句。

未启用

  • 低:建议级别。

  • 中:(默认等级)警告级别。

  • 高:红线级别。

相关操作

开启安全管控:在开启实例的安全管控时,设置安全规则集。