我得到了错误:

FATAL: Peer authentication failed for user "postgres"

当我尝试让postgres与Rails一起工作时。

这是pg_hba.conf,我的数据库。Yml,以及完整跟踪的转储。

我在pg_hba中将身份验证更改为md5,并尝试了不同的方法,但似乎都不起作用。

我还尝试按照Rails 3.2创建一个新用户和数据库,FATAL: Peer authentication failed for user (PG::Error)

但是它们不会在pgadmin上显示,甚至当我运行sudo -u postgres psql -l时也不会显示。

知道我哪里错了吗?


当前回答

问题仍然是你的pg_hba.conf文件*。

这条线:

local   all             postgres                                peer

应该是:

local   all             postgres                                md5

修改此文件后,不要忘记重新启动PostgreSQL服务器。如果你在Linux上,那将是sudo systemctl restart postgresql(在旧系统上:sudo service postgresql restart)。


定位hba.conf

注意,这个文件的位置不是很一致。

您可以使用locate pg_hba.conf或询问PostgreSQL SHOW hba_file;来发现文件位置。

通常位于/etc/postgresql/[version]/main/pg_hba.conf和/var/lib/pgsql/data/pg_hba.conf。


下面是根据官方PostgreSQL文档中的认证方法对peer和md5选项的简要描述。

对等的身份验证

对等体认证的工作原理是获取客户端的认证信息 来自内核的操作系统用户名,并使用它作为允许的 数据库用户名(可选用户名映射)。这个方法是 仅支持本地连接。

密码身份验证

The password-based authentication methods are md5 and password. These methods operate similarly except for the way that the password is sent across the connection, namely MD5-hashed and clear-text respectively. If you are at all concerned about password "sniffing" attacks then md5 is preferred. Plain password should always be avoided if possible. However, md5 cannot be used with the db_user_namespace feature. If the connection is protected by SSL encryption then password can be used safely (though SSL certificate authentication might be a better choice if one is depending on using SSL).

其他回答

问题仍然是你的pg_hba.conf文件*。

这条线:

local   all             postgres                                peer

应该是:

local   all             postgres                                md5

修改此文件后,不要忘记重新启动PostgreSQL服务器。如果你在Linux上,那将是sudo systemctl restart postgresql(在旧系统上:sudo service postgresql restart)。


定位hba.conf

注意,这个文件的位置不是很一致。

您可以使用locate pg_hba.conf或询问PostgreSQL SHOW hba_file;来发现文件位置。

通常位于/etc/postgresql/[version]/main/pg_hba.conf和/var/lib/pgsql/data/pg_hba.conf。


下面是根据官方PostgreSQL文档中的认证方法对peer和md5选项的简要描述。

对等的身份验证

对等体认证的工作原理是获取客户端的认证信息 来自内核的操作系统用户名,并使用它作为允许的 数据库用户名(可选用户名映射)。这个方法是 仅支持本地连接。

密码身份验证

The password-based authentication methods are md5 and password. These methods operate similarly except for the way that the password is sent across the connection, namely MD5-hashed and clear-text respectively. If you are at all concerned about password "sniffing" attacks then md5 is preferred. Plain password should always be avoided if possible. However, md5 cannot be used with the db_user_namespace feature. If the connection is protected by SSL encryption then password can be used safely (though SSL certificate authentication might be a better choice if one is depending on using SSL).

我也有同样的问题。

depa的解决方案是绝对正确的。

只要确保你有一个用户配置使用PostgreSQL。

检查文件:

$ ls /etc/postgresql/9.1/main/pg_hba.conf -l

这个文件的权限应该给你注册psql的用户。

进一步。如果你到现在还好…

按照@depa的指示更新。

i.e.

$ sudo nano /etc/postgresql/9.1/main/pg_hba.conf

然后做出改变。

在CentOS 7, PG 10上,文件路径为

/var/lib/pgsql/10/data/pg_hba.conf

修改pg_hba.conf中的METHOD peer为trust (/etc/postgresql/9.1/main/pg_hba.conf |第85行)可以解决这个问题。添加md5需要密码,因此如果需要避免使用密码,请使用trust而不是md5。

如果不提供主机,可能会出现此错误。下面的场景与此类似。

user@homepc:~$ psql -d test_db -U test_user psql: error: FATAL: Peer authentication failed for user" test_user" user@homepc:~$ psql -h localhost -d test_db -U test_user test_user用户密码:

提供主机解决了我的问题在psql命令行。尝试在rails中为postgress提供主机连接配置。