数据管理DMS提供的SQL窗口支持关系型数据库和非关系型数据库,安全规则的定义和分类各不相同。本文档介绍关系型数据库的SQL窗口安全规则。
单次查询最大返回行数:定义查询结果最多返回多少行。
替代原配置管理中的单次查询SQL最大的行数。
单次查询包含敏感列条件的最大返回行数:定义包含敏感列的查询结果最多返回多少行。
替代原配置管理中的单次查询包含敏感列条件的SQL最大的行数。
限制允许SQL全表扫描的最大值(MB):仅MySQL和Oracle实例有效,在查询SQL执行前检查执行计划,若扫描大小超过此阈值,则拒绝SQL执行。
其他SQL规范:可对多种SQL的执行进行约束。
如高危SQL,每个企业对高危SQL的定义不同,可能包含部分DML种类、部分DCL种类,部分DDL种类的SQL。数据管理DMS无法识别的SQL也可以在此进行约束。
SQL权限规范:对SQL执行权限进行约束。
如提交者是否拥有对应的库、表、列权限。
SQL执行性能规范:对待执行的SQL进行性能方面的约束。
如DML影响行数超过阈值,拒绝执行,DDL涉及到的表空间超过阈值,拒绝执行等。
库表列权限识别异常规范:通常DMS会对用户提交的SQL进行SQL语法解析并对访问的库表列资源进行权限校验,然而仍不支持部分复杂的SQL。当复杂的SQL解析异常导致无法正常下发时,可通过配置库表列权限识别异常规范中的规则,让SQL顺利执行。
注意:库表列权限识别异常规范会导致SQL权限规范、SQL规范校验、SQL执行性能规范等安全规则失效。
逻辑库SQL执行规范:为逻辑库查询预留的检测点,不适用于物理库查询。
您可以使用安全规则模板库中提供的规则,也可以自定义新增规则。详情请参见新增规则操作步骤。
SQL分类 | SQL子类 |
---|---|
DQL |
|
DML |
|
DDL |
|
DCL |
|
因子:因子是系统内置变量,可用来获取安全规则校验的上下文信息,如获取SQL类型、影响行数等。因子全部以@fac.
开头,后接因子名称。每个模块的不同检测点均提供不同因子,SQL窗口中提供因子的说明请参见下表:
因子名 | 说明 |
---|---|
@fac.sql_count | 单次提交的SQL条数。 |
@fac.select_sql_count | 单次提交的SQL中查询类SQL的条数。 |
@fac.dml_sql_count | 单次提交的SQL中DML SQL的条数。 |
@fac.sql_type | SQL分类。取值请参见DMS支持的SQL。 |
@fac.sql_sub_type | SQL子类,取值参考附录-SQL类型枚举中的定义。 |
@fac.env_type | 环境类型,值是环境标识。如:DEV 、PRODUCT 。详情请参见实例环境说明。 |
@fac.fulltable_delete | 当前SQL是否为全表DELETE 。取值为:
|
@fac.fulltable_update | 当前SQL是否为全表UPDATE 。取值为:
|
@fac.current_sql | 当前的SQL。 |
@fac.user_is_admin | 当前用户是否为管理员。取值为:
|
@fac.user_is_dba | 当前用户是否是DBA。取值为:
|
@fac.user_is_inst_dba | 当前用户是否是当前实例的DBA。取值为:
|
@fac.user_is_sec_admin | 当前用户是否是安全管理员。取值为:
|
@fac.sql_affected_rows | 当前SQL执行的SQL影响行数。(会执行COUNT 操作,请谨慎使用。) |
@fac.sql_relate_table_store_size | 当前SQL访问的表的预估空间总大小(MB)。(使用的是采集之后的预估值,非真实值。) |
动作:动作是满足if
条件之后系统执行的行为,例如禁止提交工单、选择工作流、允许执行、拒绝执行等,这些动作表达了安全规则的主要目的。动作全部以@act.
开头,后接动作名称。每个模块的不同检测点均提供不同动作,SQL窗口中提供动作的说明请参见下表:
动作名 | 说明 |
---|---|
@act.reject_execute | 拒绝执行当前SQL。 |
@act.allow_execute | 允许执行当前SQL。 |
@act.reject_sql_type_execute | 拒绝执行特定类型的SQL,需要指定具体的SQL子类型。例如:@act.reject_sql_type_execute 'UPDATE' 。 |
@act.allow_sql_type_execute | 允许执行特定类型的SQL,需要指定具体的SQL子类型。例如:@act.allow_sql_type_execute 'UPDATE' 。 |
@act.check_dml_sec_column_permission | 检查有无敏感列权限,如果没有,不执行DML变更。 |
@act.uncheck_dml_sec_column_permission | 不检查敏感列权限。 |
@act.check_sql_access_permission | 检查SQL操作权限,对访问的库、表、列是否有对应权限(查询、变更)。 |
@act.uncheck_sql_access_permission | 不检查SQL操作权限。 |
@act.enable_sec_column_mask | 对无权限的敏感列进行数据脱敏。 |
@act.disable_sec_column_mask | 不对无权限的敏感列进行数据脱敏。 |
安全规则提供了大量的规则模板可直接选择启用,也可以在模板基础上按照实际需求自行调整启用。SQL窗口中的模板如下所示:
检测点 | 模板 |
---|---|
SQL执行数量规范 | 控制单次执行SQL个数。 |
控制单次执行SELECT SQL个数。 | |
控制单次执行DML SQL个数。 | |
DQL SQL规范 | 无。 |
其他SQL规范 | 允许未识别SQL执行。 |
禁止全表UPDATE执行。 | |
禁止全表DELETE执行。 | |
SQL权限规范 | 控制SQL库表权限校验。 |
控制查询敏感列脱敏。 | |
控制敏感列数据的变更。 | |
控制行权限校验。 | |
SQL执行性能规范 | 禁止DML影响行数超过阈值执行。 |
禁止DDL表空间超过阈值执行。 | |
库表列权限识别异常规范 | 允许DQL SQL解析异常继续执行【继续执行会导致权限规范失效】。 |
允许DML SQL解析异常继续执行【继续执行会导致权限规范失效】。 | |
允许DDL SQL解析异常继续执行【继续执行会导致权限规范失效】。 | |
允许DCL SQL解析异常继续执行【继续执行会导致权限规范失效】。 | |
允许无法识别 SQL解析异常继续执行【继续执行会导致权限规范失效】。 | |
逻辑库SQL执行规范 | 无。 |
登录DMS控制台。
在页面顶部的导航栏中,单击系统管理 > 安全管理 > 安全规则。
在安全规则页签中,单击目标规则集右侧操作列中的编辑。
在详情页面左侧的导航栏中,单击SQL窗口。
在SQL窗口页签中,单击操作右侧的新增规则。
在新增规则 - SQL窗口对话框中,设置如下参数:
参数 | 说明 |
---|---|
检测点(必选) | 选择需要增加规则的检测点。检测点的详情请参见检测点。 |
模板库(可选) | 安全规则模板库中提供了大量规则模板,选择了检测点以后,您可以从模板库中按需加载规则模板。可选的模板库列表请参见模板库。 |
规则名称(必填) | 自定义规则名称。(如您在模板库中选择了规则模板,此处会自动填充。) |
规则DSL(必填) | 填写规则DSL,DSL语法请参见安全规则DSL语法。如您在模板库中选择了规则模板,此处会自动填充。 |
单击提交。
新增的规则默认处于已禁用状态,单击规则右侧操作列中的启用。
在弹出的对话框中单击确认。
在文档使用中是否遇到以下问题
更多建议
匿名提交