如何让 pg_dump 正确验证

问题描述 投票:0回答:3

我尝试使用主机变量

PGPASSWORD
.pgpass
,这两个都不允许我对数据库进行身份验证。我拥有
chmod
'd
.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"
postgresql pg-dump
3个回答
251
投票

快速解决方案

问题在于它正在尝试根据您当前的用户名执行本地

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
并重新加载 postgres 即可完成。

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

18
投票

有时你可以使用

sudo -u postgres pg_dump ...

0
投票

几周前为了工作弄清楚后,我不得不再次查找这个(但现在尝试在家里设置一个 postgresql 数据库),但你可能想修改你的

pg_hba.conf
文件。

我所做的是注释掉默认的“本地”规范,因为它使用

peer
方法对所有本地用户进行身份验证。 数据库管理员的这篇文章有助于阐明这一点。

最后,您的

pg_hba.conf
文件应如下所示:

# "local" is for Unix domain socket connections only
#local   all             all                                     peer
local   <db_name>    <user>                                   password

然后,如果您想使用 cron 计划备份或重新启动服务后需要做的事情是:

PGPASSWORD=$(cat /home/<user>/.pg-pass) pg_dump -Fc -U <pg_user> -d <db_name> > /home/<user>/<db_name>.dump

转储文件的输出位置无关紧要,因此我暂时将其放在我的主文件夹中,但为了工作,我在脚本中设置了相同样式的代码设置,该脚本创建每日备份,然后

rclone
到云。

© www.soinside.com 2019 - 2024. All rights reserved.