问题描述
我正在使用psycopg2访问单独服务器上的Postgresql数据库,并使用sql结果创建CSV文件。我想创建一种方法,让我的员工可以在同一网络上使用脚本运行这些报告,而不必授予他们访问用于登录Psql DB的凭据的权限。后来有好几项Google搜索结果,但我仍然想知道实现此目标的最佳方法是什么。我对Python环境之外的方法持开放态度。在这种情况下隐藏凭据的最安全方法是什么?
解决方法
由于您只想与同事共享脚本,所以您可以做的是加密凭据并将其保存到文本文件中,该文件将随脚本一起提供。然后,在您的脚本中,您将读取该文本文件,以解密加密的凭证并用于连接到数据库。对于您的用例“ ... {without giving them access to the credentials used to log in to the PSQL DB
”来说,这应该足够了
请尝试执行以下步骤:
- 安装fernet加密库:pip3安装加密
2)加密您的密码并将加密的字符串保存在“ .ini”文件中:
from cryptography.fernet import Fernet
key = Fernet.generate_key()
cipher_suite = Fernet(key)
cipher_text = cipher_suite.encrypt(b"MyPassword&#)__")
.ini文件的内容(对于上面的示例):
[DEFAULT]
password = AAAAABfPGwDK7-5uz_YxUtkfWohehtg53lgvMX5NbC4lgU_trZGI9gGioqdLKUVp6ZaAQdVKurirQ-dQ5MsAPNk87wsA74Tng==
- 读取加密文件并解密以用作密码
from configparser import ConfigParser
from cryptography.fernet import Fernet
config = ConfigParser()
config.read('src/params.ini')
encrypted = config.get('DEFAULT','password')
plain_text = cipher_suite.decrypt(encrypted)
print(plain_text.decode("utf-8"))
请记住,尽管这一选择很简单,它将满足您的要求,我们还有许多其他选择(更安全的选择)可以满足您的需求。