如何获得pg_dump进行正确的身份验证


98

我尝试使用主机变量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"

1
错误消息的“ ...对等身份验证...”部分表示它根本没有使用密码身份验证
Milen A. Radev

Answers:


196

快速解决方案

问题是它正在尝试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以上更改为trustpostgres并重新加载即可。

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

6
对于不确定conf文件在哪里的任何人:use- sudo locate pg_hba.conf它必须是sudo,因为postgres用户将是唯一有权访问该目录的人(我认为)。
jcollum 2014年

您的命令对我有用,但是我找不到它的位置,或者文件的名称是什么,我如何找到该文件?
Sobhan)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.