如何在 Python 脚本中隐藏 SQL Plus 密码

How to hide SQL Plus password in Python script

我创建了Python 脚本运行cate Oracle table。我使用 SQL Plus,但问题是我现在必须隐藏纯文本密码。我有这样的论点:

db_name = "DB_NAME"
db_user = "DB_USER"
db_password = "DB_PASS"

然后我 运行 命令如下:

sqlplus_delete_table = 'echo "TRUNCATE TABLE ' + db_user + '.' + table + ' DROP STORAGE;"'
sqlplus_connection = db_user + '/' + db_password + '@' + db_name
os.system(sqlplus_delete_table + ' | sqlplus -s ' + sqlplus_connection)

一切正常,但问题是密码。据我所知,SQL Plus 不使用 jceks 文件。那么隐藏密码的其他解决方案是什么?

在 Linux 上可以创建 bash-脚本,例如:

# sql.env
export db_PSSWD='pswd'
export db_USER='user'

之前运行宁python,运行bash-初始化环境变量的脚本:

source sql.env

然后,在python中:

db_psswd = os.environ.get("db_PSSWD")
db_user = os.environ.get("db_USER")

您可以使用像 Django 的 SECRET_KEY 这样的解决方案,我将其存储在一个不在项目存储库中的文件中。从这个文件中,我在 settings.py:

中加载这样的键
with open(os.path.join(ROOT_DIR, 'etc/secret_key.txt')) as f:
    SECRET_KEY = f.read().strip()

在上面的示例中,文本文件的内容只是密钥,但您可以使用结构化格式,例如 JSON、YAML,甚至 Python 文件并导入它。

Python 秘密文件示例:

# secret.py
DB_PSSWD='pswd'
DB_USER='user'

在您的源代码中只需:

import secret

print(DB_USER)

YAML 机密文件示例:

# secret.yaml
db_psswd: pswd
db_user: user

在您的源代码中只需:

import yaml

with open('secret.yaml') as yaml_secret:
    rules = yaml.load(cfg)
print(rules['db_user'])