Postgres 的 C 库 libpq documentation讨论无需在源代码中指定密码即可连接到数据库的更安全方法。
我没能找到任何关于如何做的例子。如何让我的 Postgre 服务器使用这个文件?请帮忙。
最佳答案
您不会将其导入到您的 Python 程序中。 .pgpass
的意义在于,它是一个受系统文件权限约束的常规文件,以及 psycopg2 等库使用的 libpq 驱动程序连接到 Postgres 将查找此文件以获取密码,而不是要求密码位于源代码中或提示输入密码。
此外,这不是服务器端文件,而是客户端文件。因此,在 *nix 机器上,您将拥有一个 ~/.pgpass
文件,其中包含您希望能够建立的各种连接的凭据。
根据 OP 的评论进行编辑:
为了让 psycopg2 通过 .pgpass
正确验证,需要做两件主要的事情:
- 不要在传递给
psycopg2.connect
的字符串中指定密码 - 确保为将通过 psycopg2 连接的用户将正确的条目添加到
.pgpass
文件。
例如,要使此操作适用于 localhost 端口 5432 上特定用户的所有数据库,您可以将以下行添加到该用户的 .pgpass
文件:
localhost:5432:*:<username>:<password>
然后 connect
调用将采用以下形式:
conn = psycopg2.connect("host=localhost dbname=<dbname> user=<username>")
psycopg2 使用的底层 libpq 驱动程序随后将利用 .pgpass
文件获取密码。
关于postgresql - 如何使用 libpq 的 pgpass 连接到 postgresql,而不指定纯文本密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28800880/