pyspark 数据块对硬编码值显示REDACTED

e0bqpujr  于 2023-03-17  发布在  Spark
关注(0)|答案(1)|浏览(118)

我正在使用Azure数据块从Azure密钥保管库中获取环境值,该值为intg

env = dbutils.secrets.get(scope = "myscrope", key = "environment")

当我打印这个时,它显示为[REDACTED],这是预期的。
现在我声明另一个变量如下。

prm = 'myintgterritoy'

当我打印这个变量时,它显示为my[REDACTED]territoy,因为intg关键字在这里。我不期望这个行为,因为这是一个完全不同的变量。我如何才能得到myintgterritoy的值?
我尝试了一种方法,可以使用下面的代码将带有空格的实际值放到一个新变量中。

new_prm = ''
for char in prm:
  new_prm += char + ' '

但是当我用空字符串替换空格时,它返回的结果是my[REDACTED]territoy

new_prm.replace(' ','')

我希望输出为myintgterritoy

juzqafwq

juzqafwq1#

这是不可能的,Databricks只是扫描整个输出中出现的秘密值,并将其替换为“[REDACTED]"。
如果你转换值,这是没有用的。例如,就像你已经尝试过的,你可以在字符之间插入空格,这将显示值。你可以对一个不可见的字符使用一个技巧-例如Unicode invisible separator,它在UTF-8中编码为0xE281A3

invisible_sep = bytes.fromhex("E281A3").decode("utf-8")
secret = dbutils.secrets.get("myscrope", "environment")
plaintextSecret = secret.replace("", invisible_sep)
print(secret)  # would print "[REDACTED]"
print(plaintextSecret)  # would print "intg"

注意,看起来像“intg”的东西实际上是“intg”--所以分隔符仍然在那里,只是看不见,如果你复制粘贴值,分隔符会保留下来。
更好的做法是,使用秘密范围来定义真正的秘密,而对于其他变量,选择其他工具,如Azure应用程序配置或领事KV,或者可能只是一个配置文件。

相关问题