如何使用 pg_dump 进行正确的身份验证

我已经尝试使用主机变量 PGPASSWORD.pgpass,这两个都不允许我对数据库进行身份验证。我有 chmod.pgpass到适当的权限,也尝试:

export PGPASSWORD=mypass and PGPASSWORD=mypass

密码确实包含一个 \,但是我将它封装在单引号 PGPASS='mypass\'中,它仍然不会进行身份验证。

我在跑步:

pg_dump dbname -U username -Fc

我仍然收到

pg_dump: [archiver (db)] connection to database "dbname" failed: FATAL:  Peer authentication failed for user "username"
97286 次浏览

快速解决方案

问题是它试图根据您当前的用户名执行本地 peer身份验证。如果要使用密码,必须使用 -h指定主机名。

pg_dump dbname -U username -h localhost -F c

解释

这是由于以下在您的 pg_hba.conf

local   all             all                                     peer
host    all             all             127.0.0.1/32            md5

这告诉 Postgres 对本地用户使用 peer身份验证,这需要 Postgres 用户名与当前系统用户名匹配。第二行指的是使用主机名的连接,允许您通过 md5方法使用密码进行身份验证。

我的首选开发配置

注意 : 这应该只在单用户工作站上使用。这可能导致生产或多用户机器上出现重大安全漏洞。

在针对本地 postgres 实例进行开发时,我喜欢将本地身份验证方法更改为 trust。这将允许通过本地 unix 套接字连接到 postgres 作为任何用户没有密码。它可以通过简单地改变 peer以上的 trust和重新加载后。

# Don't require a password for local connections
local   all             all                                     trust

有时候你可以利用

sudo -u postgres pg_dump ...