更新时间:2022-12-14 GMT+08:00

配置是否显示包含敏感词的Spark SQL语句

配置场景

用户执行的SQL语句中可能会包含敏感信息(如用户密码等),若泄漏出去会存在一定的安全风险。此时,用户可以通过设置“spark.sql.redaction.string.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 参数说明

参数

描述

默认值

spark.sql.redaction.string.regex

决定Spark生成的字符串的哪些部分是敏感词的正则表达式。当正则表达式匹配到字符串的敏感词部分时,该部分字符串将会使用字符串*********(redacted)替换。

说明:

此处需要配置为正则表达式格式。

pwd|password

  • 当使用Spark Beeline时,需要重启JDBCServer,配置才会生效。当使用spark-sql时,需要重启spark-sql,配置才会生效。
  • 以上参数,仅对配置后执行的SQL语句生效,对配置前执行的SQL语句不生效。