
# 添加MRS SQL防御规则
用户可以在Manager界面对指定的租户及SQL引擎添加SQL防御规则，系统会对触发规则的SQL请求进行提示、拦截或阻断操作。
![](https://support.huaweicloud.com/usermanual-mrs/public_sys-resources/warning_3.0-zh-cn.png)
为集群添加或者修改SQL防御规则时需结合业务场景进行规则是否开启以及对应规则阈值是否合理的评估，不合理的防御规则对相关SQL请求进行拦截或阻断后，可能会对上层业务造成影响。
#### 添加SQL防御规则
1. 使用具有Manager界面管理权限的用户登录MRS集群Manager界面。 
   登录集群Manager界面请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
   
   
2. 选择"集群 \> SQL防御"，打开SQL防御页面。 
   可以单击"查看所有支持规则"查看当前集群所有支持的SQL防御规则。
   
   
3. 单击"添加规则"，验证当前用户密码后，打开添加规则页面。
4. 配置相关参数后，单击"确定"。 
   
   | 参数    | 示例             | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   |:---|:---|:---|
   | 规则名称  | SQL_defenses01 | 自定义SQL防御规则名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   | 规则ID  | static_0001    | 选择规则ID。 不同ID对应的防御规则含义信息可参考[表1]。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | 租户    | default        | 单击"添加"选择可适用当前防御规则的租户名称。 如需新增租户，可参考[管理MRS集群租户](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0303.html)进行集群租户的规划与创建。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   | 服务与动作 | -              | 单击"添加"指定当前SQL防御规则所关联的SQL引擎并配置规则的阈值参数。 每条规则可以关联1个SQL引擎，如需针对其他SQL引擎继续配置，可以继续添加规则。 - 服务：选择当前SQL防御规则所关联的SQL引擎。  - SQL请求满足防御规则后，系统的处理操作有以下类型： - 提示：配置系统对SQL请求满足防御规则后，是否进行日志记录和提示处理。开启按钮时，如果当前规则有变量参数，需同时配置阈值。  - 拦截：配置系统对SQL请求满足防御规则后，是否进行拦截处理。开启按钮时，如果当前规则有变量参数，需同时配置阈值。  - 熔断：配置系统对SQL请求满足防御规则后，是否进行熔断处理。开启按钮时，如果当前规则有变量参数，需同时配置阈值。     对于规则类型为静态拦截、动态拦截的SQL防御规则，系统支持"提示"、"拦截"操作。对于规则类型为运行熔断的SQL防御规则，系统支持"熔断"操作。 |
   | 豁免用户  | user1          | 配置豁免用户，规则对指定用户不生效。（该参数仅MRS 3.6.0及之后版本支持） 单击"添加"，勾选用户后单击"确定"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
      
   
   
5. 规则添加成功后，可以在"SQL防御"界面查看已添加的防御规则。防御规则动态生效。 
   如需对当前规则进行调整，可单击对应规则所在"操作"列的"修改"，验证用户密码后可修改规则相关参数。
   图1查看SQL防御规则   
   ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000002479447516.png "点击放大")
   
   
 
 #### MRS SQL防御规则
 表1MRS SQL防御规则 
| 规则ID         | 规则描述                                          | 规则适用引擎                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | 规则变量参数                                                                                                                       | SQL语句示例                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
|:---|:---|:---|:---|:---|
| static_0001  | SQL中count(distinct)出现次数超限。                    | - Hive  - Spark  - HetuEngine                                                                                                                                                                                                     | count(distinct)出现次数阈值。 建议配置值：10   | SELECT COUNT(DISTINCT deviceId), COUNT(DISTINCT collDeviceId) FROM table GROUP BY deviceName, collDeviceName, collCurrentVersion;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| static_0002  | SQL中是否使用了not in \<subquery\>语句。               | - Hive  - Spark  - HetuEngine                                                                                                                                                                                                             | N/A                                                                                                                          | SELECT \* FROM Orders o WHERE Orders.Order_ID not in (Select Order_ID FROM HeldOrders h where h.order_id = o.order_id);                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| static_0003  | SQL中的join次数超限制。                               | - Hive  - Spark  - HetuEngine                                                                                                                                                                                                                       | join次数阈值。 建议配置值：20                  | N/A                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| static_0004  | SQL中的union all次数超限制。                          | - Hive  - Spark  - HetuEngine                                                                                                                                                                                                                  | union all次数阈值。 建议配置值：20           | select \* from tables t1 union all select \* from tables t2 union all select \* from tables t3 union all select \* from tables t4 union all select \* from tables t5 union all select \* from tables t6 union all select \* from tables t7 union all select \* from tables t8 union all select \* from tables t9; |
| static_0005  | 子查询嵌套层数超限制。                                   | - Hive  - Spark  - HetuEngine                                                                                                                                                                                                               | 子查询的嵌套层数。 建议配置值：20                 | select \* from ( with temp1 as (select \* from tables) select \* from temp1);                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| static_0006  | SQL语句字符串长度超限制。                                | - Hive  - Spark  - HetuEngine                                                                                                                                                                                                                 | SQL字符串长度，单位为KB。 建议配置值：10            | N/A                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| static_0007  | 多表关联时存在笛卡尔积。                                  | - Hive  - Spark  - HetuEngine                                                                                                                                                                                                   | N/A                                                                                                                          | select \* from A,B;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| static_0008  | 在集群级别（on cluster）执行alter table update操作。      | ClickHouse                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | N/A                                                                                                                          | alter table testtb1 on cluster default_cluster update price=10.0 where id='100'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| static_0009  | 在集群级别（on cluster）执行alter table delete 操作。     | ClickHouse                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | N/A                                                                                                                          | alter table testtb1 on cluster default_cluster delete where id ='10'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| static_0010  | 在集群级别（on cluster）执行alter table add column操作。  | ClickHouse                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | N/A                                                                                                                          | alter table testtb1 on cluster default_cluster add column testc String                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| static_0011  | 在集群级别（on cluster）执行alter table drop column操作。 | ClickHouse                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | N/A                                                                                                                          | alter table testtb1 on cluster default_cluster drop column testc                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| static_0012  | 在集群级别（on cluster）执行optimize final操作。          | ClickHouse                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | N/A                                                                                                                          | optimize table testtb1 on cluster default_cluster final                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| static_0013  | 在集群级别（on cluster）执行drop table操作。              | ClickHouse                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | N/A                                                                                                                          | drop table testtb1 on cluster default_cluster;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| static_0014  | 在集群级别（on cluster）执行truncate table操作。          | ClickHouse                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | N/A                                                                                                                          | truncate table testtb1 on cluster default_cluster;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| dynamic_0001 | 扫描文件数超限制。                                     | - Hive  - Spark  - HetuEngine                                                                                                                                                                                                        | 计划/已经扫描的文件数量阈值。 建议配置值：100000        | SELECT ss_ticket_number FROM store_sales WHERE ss_ticket_number=72291252 LIMIT 10;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| dynamic_0002 | 对单个表操作（select、delete、update、alter）涉及的分区数超限制。  | - Hive  - Spark  - HetuEngine  - ClickHouse       | 表操作所涉及的分区数量阈值。 建议配置值：10000         | DELETE FROM table_name WHERE column_name = value                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| dynamic_0003 | join的右表为分布式表时，右表的数据量超限制。                      | ClickHouse                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 执行join操作时，右表的行数阈值。 建议配置值：100000000 | SELECT name, text FROM table_1 JOIN table_2 ON table_1.Id = table_2.Id                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| running_0001 | Select类型的SQL语句向客户端返回的结果行数超限制。                 | - Hive  - Spark  - HetuEngine  - ClickHouse               | 查询返回结果的行数阈值。 建议配置值：100000          | select \* from table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| running_0002 | SQL的占用内存峰值超绝对值限制。                             | - Hive  - Spark  - HetuEngine  - ClickHouse         | SQL运行占用内容阈值，单位为MB。                                                                                                           | N/A                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| running_0003 | SQL已经运行的时长超限制。                                | - Hive  - Spark  - HetuEngine  - ClickHouse         | SQL运行时长阈值，单位为秒。                                                                                                              | N/A                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| running_0004 | SQL已经发生的数据扫描量。                                | - Hive  - Spark  - HetuEngine  - ClickHouse   | SQL扫描数据量，单位为GB。 建议配置值：10240      | N/A                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   
