Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何隐藏访问不同服务器上数据库的多用户python脚本的凭据?_Python_Postgresql_Credentials - Fatal编程技术网

如何隐藏访问不同服务器上数据库的多用户python脚本的凭据?

如何隐藏访问不同服务器上数据库的多用户python脚本的凭据?,python,postgresql,credentials,Python,Postgresql,Credentials,我正在使用psycopg2访问单独服务器上的PostgreSQL数据库,并创建一个包含SQL结果的CSV文件。我想创建一种方法,让同一网络上的员工使用我的脚本运行这些报告,而不让他们访问用于登录PSQL DB的凭据。几次谷歌搜索结果之后,我仍然在想,最好的方法是什么。我对Python环境之外的方法持开放态度。在这种情况下,隐藏凭据最安全的方法是什么?因为您只想与同事共享您的脚本,所以您可以加密凭据并保存到脚本附带的文本文件中。然后,在脚本中,您将读取此文本文件,对加密凭据进行解密,并用于连接到数

我正在使用psycopg2访问单独服务器上的PostgreSQL数据库,并创建一个包含SQL结果的CSV文件。我想创建一种方法,让同一网络上的员工使用我的脚本运行这些报告,而不让他们访问用于登录PSQL DB的凭据。几次谷歌搜索结果之后,我仍然在想,最好的方法是什么。我对Python环境之外的方法持开放态度。在这种情况下,隐藏凭据最安全的方法是什么?

因为您只想与同事共享您的脚本,所以您可以加密凭据并保存到脚本附带的文本文件中。然后,在脚本中,您将读取此文本文件,对加密凭据进行解密,并用于连接到数据库。这对于您的用例来说应该足够了,即“…
,而不允许他们访问用于登录到PSQL DB的凭据。”
请尝试以下步骤:

  • 安装加密库: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"))