postgresql - 如何使用 libpq 的 pgpass 连接到 postgresql,而不指定纯文本密码?

标签 postgresql libpq

Postgres 的 C 库 libpq documentation讨论无需在源代码中指定密码即可连接到数据库的更安全方法。

我没能找到任何关于如何做的例子。如何让我的 Postgre 服务器使用这个文件?请帮忙。

最佳答案

您不会将其导入到您的 Python 程序中。 .pgpass 的意义在于,它是一个受系统文件权限约束的常规文件,以及 psycopg2 等库使用的 libpq 驱动程序连接到 Postgres 将查找此文件以获取密码,而不是要求密码位于源代码中或提示输入密码。

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

根据 OP 的评论进行编辑:

为了让 psycopg2 通过 .pgpass 正确验证,需要做两件主要的事情:

  1. 不要在传递给psycopg2.connect的字符串中指定密码
  2. 确保为将通过 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/

相关文章:

ruby-on-rails - 如何按周对我的账户余额进行分组?

c++ - 使用准备好的语句批量插入到Postgresql

postgresql - 如何在 Linux 上使用 libpq 解析 Postgresql 中的数组列

c++ - 线程安全的 PQconn 对象

c - 从 Postgresql 数据库检索图像文件返回两倍大的插入数据(通过 libpq 库)

sql - 找出 SQL 选择不返回任何数据原因的工具

sql - 有 3 个实体,根据其他 2 个实体的关系数(计数)得到第三个实体

jdbc - 为什么数据库的编程接口(interface)称为驱动程序?

postgresql - 如何在没有警告停止的情况下在postgres中执行真空命令?

postgresql - 如何一次刷新Postgresql 9.3中的所有物化 View ?