python用libpq-pgpass连接到postgresql

ovo*_*vod 7 python postgresql libpq

我读到使用http://www.postgresql.org/docs/9.2/static/libpq-pgpass.html连接到postgresql数据库时没有在源代码中指定密码的更安全的方法.但不幸的是,我无法找到如何将其导入我的python程序的任何示例以及如何使我的postgresql服务器使用此文件.请帮忙.

kha*_*son 21

您不会将其导入Python程序.关键.pgpass是它是一个受系统文件权限限制的常规文件,而psycopg2用来连接Postgreslibpq驱动程序将查找此文件的密码,而不是要求密码在源代码中或提示它.

此外,这不是服务器端文件,而是客户端文件.因此,在*nix框中,您将拥有一个~/.pgpass文件,其中包含您希望能够进行的各种连接的凭据.

编辑以回应OP的评论:

要使psycopg2通过.pgpass以下方式正确进行身份验证,需要执行以下两项主要操作:

  1. 不要指定传递给字符串密码psycopg2.connect
  2. 确保.pgpass将通过psycopg2连接的用户的文件中添加了正确的条目.

例如,要使此功能适用于localhost端口5432上特定用户的所有数据库,您可以将以下行添加到该用户的.pgpass文件中:

localhost:5432:*:<username>:<password>
Run Code Online (Sandbox Code Playgroud)

然后connect调用将是这种形式:

conn = psycopg2.connect("host=localhost dbname=<dbname> user=<username>")
Run Code Online (Sandbox Code Playgroud)

然后,psycopg2使用的底层libpq驱动程序将使用该文件来获取密码..pgpass

  • 我只需要补充一点,如果您要在 *nix 机器上执行此操作,还必须运行命令 `chmod 0600 ~/.pgpass` 如果权限不那么严格,则该文件将被忽略。运行此命令以及 khampson 的答案是我的解决方案。 (3认同)