Databricks 显示硬编码值已编辑

Sar*_*avu 2 pyspark databricks azure-databricks

我正在使用 Azure Databricks 从具有值 的 Azure Key Vault 获取环境值intg

env = dbutils.secrets.get(scope = "myscrope", key = "environment")
Run Code Online (Sandbox Code Playgroud)

当我打印此内容时,它显示为[REDACTED],这是预期的。

现在我声明另一个变量,如下所示。

prm = 'myintgterritoy'
Run Code Online (Sandbox Code Playgroud)

当我打印此内容时,它显示为my[REDACTED]territoy关键字intg所在的内容。我并不期望这种行为,因为这是完全不同的变量。我怎样才能得到 的值myintgterritoy

我尝试了一种方法,可以使用下面的代码将带有空格的实际值放入新变量中。

new_prm = ''
for char in prm:
  new_prm += char + ' '
Run Code Online (Sandbox Code Playgroud)

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

new_prm.replace(' ','')
Run Code Online (Sandbox Code Playgroud)

我期望输出为myintgterritoy.

Kom*_*owy 5

这是不可能的,Databricks 只是扫描整个输出以查找秘密值的出现并将其替换为“[已编辑]”。

如果你变换这个值,那是没办法的事。例如,就像您已经尝试过的那样,您可以在字符之间插入空格,这将显示该值。您可以对不可见字符使用技巧 - 例如 Unicode不可见分隔符,它以0xE281A3UTF-8 编码。

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"
Run Code Online (Sandbox Code Playgroud)

请注意,实际上看起来像“intg”的是“<sep>i<sep>n<sep>t<sep>g<sep>” - 所以分隔符仍然存在,只是不可见,并且如果您例如,分隔符将保留。复制粘贴该值。

更好的是,对真正的秘密使用秘密范围,对于其他变量,选择其他工具,例如 Azure 应用程序配置或 Consul KV,或者可能只是一个配置文件。