
# 配置Hive SQL防御规则
用户可以在Manager界面配置Hive的SQL防御规则，根据业务调整对应SQL防御规则的参数。
#### 前提条件
- 已安装包含Hive服务的集群客户端，例如安装目录为"/opt/hadoopclient"。
- 集群中Hive服务运行状态正常。
- 对于开启了Kerberos认证的集群，已创建具有Hive操作权限的用户。
 
#### 约束限制
- 防御规则默认动态生效时间为5秒，修改队列后Hive防御规则重新加载时间为10分钟。
- 拦截和熔断规则会中断SQL任务，请根据实际业务配置合理的值。
- 动态规则dynamic_0001（SQL语句扫描的文件数超过阈值），当Spark与Tez引擎达到提示阈值时拦截日志会在Yarn任务日志中打印，不支持在Beeline客户端输出。
- 熔断规则存在统计误差，例如规则running_0004，扫描数据量阈值配置10GB，但是因为判断周期和任务并发影响，可能在15GB甚至更高才进行熔断。
 
#### 配置Hive SQL防御规则
1. 登录MRS集群Manager界面。 
   登录集群Manager界面请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
   
   
2. 选择"集群 \> SQL防御"，打开SQL防御页面。
3. 参考[添加MRS SQL防御规则](https://support.huaweicloud.com/usermanual-mrs/mrs_01_300125.html)添加针对Hive的SQL防御规则。
   
   Hive SQL引擎支持的各类型SQL防御规则可参考[MRS SQL防御规则](https://support.huaweicloud.com/usermanual-mrs/mrs_01_300125.html#mrs_01_300125__zh-cn_topic_0000001683411170_zh-cn_topic_0000001662442869_section19510043143814)。
   例如添加一条规则ID为"static_0001"，SQL语句中count distinct出现次数超过2就进行"提示"的规则。
   图1添加Hive SQL防御规则   
   ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000002479450664.png "点击放大")
   
   
4. 登录安装有Hive客户端的节点，执行以下命令，切换到客户端安装目录。 
   **cd /opt/hadoopclient**
   执行以下命令，配置环境变量。
   **source bigdata_env**
   执行以下命令认证当前用户（若集群未启用Kerberos认证（普通模式）请跳过该操作）：
   **kinit** *具有Hive操作权限的组件业务用户*
   
   
5. 执行以下命令登录Hive客户端： 
   **beeline**
   
   
6. 执行以下命令创建一个表并插入数据。 
   **drop table if exists hivetb;**
   **create table hivetb(a int,b int);**
   **insert into hivetb select 1,11;**
   **insert into hivetb select 2,22;**
   
   
7. 执行以下SQL语句命令，检查当前SQL防御规则是否生效。 
   **select count(distinct a),count(distinct b) from hivetb;**
   当前语句中count distinct出现次数超出了[步骤 3]中配置规则的阈值，系统提示信息如下：
   ```
   ...
   WARN  : STATIC_0001 The count(distinct X) times exceeds the limit : 2, current count distinct times : 2
   ...
   ```
   若SQL防御规则中设置的动作是"拦截"，则命令直接执行失败，系统回显信息如下：
   ```
   ...
   Error: Error while compiling statement: FAILED: RuleException STATIC_0001 The count(distinct X) times exceeds the limit : 2, current count distinct times : 2 (state=42000,code=40000)
   ...
   ```
   ![](https://support.huaweicloud.com/usermanual-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - 更多Hive SQL防御规则可参考[MRS SQL防御规则](https://support.huaweicloud.com/usermanual-mrs/mrs_01_300125.html#mrs_01_300125__zh-cn_topic_0000001683411170_zh-cn_topic_0000001662442869_section19510043143814)。
   
   - 用户也可通过日志查询SQL防御详情，Hive SQL防御日志路径地址为"/var/log/Bigdata/audit/hive/hiveserver/queryinfo.log"。
    
   
   
 
