PostgreSQL用户身份验证错误

时间:2014-02-25 10:10:47

标签: ruby-on-rails postgresql

我将PostgreSQL用于我的Rails应用程序。通过pgAdmin和控制台对PostgreSQL服务器进行身份验证是成功的,但是当我运行Rails应用程序时,我收到以下错误:

FATAL:  Peer authentication failed for user "postgres"

我的database.yml

development:
  adapter: postgresql
  encoding: unicode
  database: app_dating
  pool: 5
  timeout: 5000
  username: postgres
  password: '123456'

pg_hba.conf

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

我使用Rails 4.0.1和PotgreSQL 9.1。

1 个答案:

答案 0 :(得分:2)

您发布的pg_hba.conf似乎不完整。你可能还有另外一个与此类似的条目(可能还有更多的东西):

# Database administrative login by Unix domain socket
local   all             postgres                                peer

关于对等身份验证的Postgres documentation for the pg_hba.conf州:

  

对等
  从操作系统获取客户端的操作系统用户名,并检查它是否与请求的数据库用户名匹配。这仅适用于本地连接。有关详细信息,请参阅第19.3.7节。

因此,您必须确保使用此配置的本地unix套接字(不是TCP连接)。此外,您需要在Postgres数据库中拥有postgres用户。

另一种方法是将该行从pg_hba.conf中删除,以回退到定义的其他机制。确保您的postgres用户设置了有效的密码。

请注意,拥有一个名为postgres的预定义超级用户是很常见的,该超级用户拥有所有权限而无需任何权限检查。将该用户用于应用程序(例如您的Rails应用程序)并不明智。相反,在Postgres数据库中创建一个新的专用用户,并将其用于您的应用程序。