# 配置是否显示包含敏感词的Spark SQL语句
#### 操作场景
用户执行的SQL语句中可能会包含敏感信息（如用户密码等），如果泄漏出去会存在一定的安全风险。此时，用户可以通过设置"spark.sql.redaction.string.regex"，"spark.redaction.regex"，"spark.redaction.string.regex"和"spark.sql.redaction.options.regex"参数，在日志和Web UI上屏蔽包含敏感词的SQL关键词。
显示Spark SQL语句包含两部分：
1. 在日志中显示SQL语句：
   - Driver日志：在JDBCServer服务中，每通过Beeline执行一句SQL语句就会在Driver日志中打印对应的SQL语句。如"Running query 'show tables' with 0f8fee16-4291-4854-a7b4-b87a162f7cbb"。
   
   - eventLog日志：每个Spark应用只要开启了写eventLog功能(设置spark.eventLog.enabled=true)，就会写eventLog事件，而使用JDBCServer和Spark SQL执行的SQL语句信息也都会打印在eventLog文件中。
    
2. 在Web UI上显示SQL语句：
   - SparkUI：当执行SQL语句时，能在SparkUI页面的Jobs、Stages等标签页看到执行的SQL语句信息。
   
   - HistoryServer：HistoryServer通过读取eventLog文件的内容，将app信息展示在页面上。所以当eventLog文件中有SQL语句记录时，用户也就能在HistoryServer页面上看见对应的SQL语句。
    
 
#### 配置描述
1. 登录FusionInsight Manager系统。 
   详细操作请参考[访问集群Manager](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_2124.html)。
   
   
2. 选择"集群 \> 服务 \> Spark2x/Spark \> 配置"，单击"全部配置"，搜索并调整以下参数。 
   表1参数说明 
   | 参数                                  | 描述                                                                                                                                                | 参数值                                         |
   |:---|:---|:---|
   | spark.redaction.regex              | 决定哪些Spark配置属性键/值、环境变量含敏感信息。命中后从SparkUI环境页、YARN日志、eventLog等脱敏。全局静态配置，作用于整个应用，启动时读取，需重启任务生效。                                                       | (?i)secret\|password\|token\|access\[.\]key |
   | spark.redaction.string.regex     | 决定Spark产生的任意字符串中哪些部分是敏感词。正则匹配到的部分替换为虚拟值，当前主要用于脱敏SQL explain输出。全局静态配置。                                                                             | file:/\[\^\\\\\]\\\\s\]+                    |
   | spark.sql.redaction.options.regex | 决定SQL命令options映射中哪些键包含敏感信息。键名匹配的选项值在explain输出中脱敏。**叠加在spark.redaction.regex全局规则之上**。会话级配置，作用于当前会话，spark-defaults.conf 方式需重启 JDBCServer/spark-sql。 | (?i)url                                     |
   | spark.sql.redaction.string.regex  | 决定Spark生成的字符串（含SQL explain输出）中哪些部分是敏感词的正则表达式。正则匹配到敏感词时替换为\*\*\*\*\*\*\*\*\*(redacted)。会话级配置。                                                    | ((?i)(?\<=password=))('.\*')                 |
      
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - 当使用Spark Beeline时，需要重启JDBCServer，配置才会生效。当使用spark-sql时，需要重启spark-sql，配置才会生效。
   
   - 以上参数，仅对配置后执行的SQL语句生效，对配置前执行的SQL语句不生效。
    
   
   

3. 修改参数配置后，单击"保存"，根据界面提示操作后，等待配置保存成功。
4. Spark服务端配置更新后，如果"配置状态"为"配置过期"，则需重启组件以使配置生效。 
   图1修改Spark配置   
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002743245684.png "点击放大")
   在Spark服务概览页面，选择"更多 \> 重启服务/滚动重启服务"，验证管理员密码后，等待服务重启成功。
   如果使用Spark客户端提交任务，修改了集群的参数"spark.sql.sources.partitionOverwriteMode"后，需要重新下载客户端才能使配置生效，请参考[使用MRS客户端](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_2126.html)。
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/warning_3.0-zh-cn.png)
   组件重启期间将无法对外提供服务，可能会影响集群的上层业务正常运行，请在业务空闲期或确认操作无影响后再执行本操作。
   
   
 
