rake db:create 失败,与 postgresql 8.4 的身份验证问题相关。

8

首先,非常抱歉我对此一窍不通。我真的尽力在寻找解决方案,但现在我被卡住了,完全不知所措。

我正在尝试将Rails 3应用部署到远程服务器上;当我在本地虚拟机上开发时,没有出现任何问题。但是现在,当我尝试运行

rake db:create

出现错误(已经翻译成中文,因为我是法国人):

FATAL : password authentication failed for user <<mylogin>>

这是我的database.yml文件:

login: &login
  adapter: postgresql
  username: mylogin
  password: mypassword
  host: localhost
  port: 5432
  encoding: UTF8

development:
  <<: *login
  database: somesite_development

test:
  <<: *login
  database: somesite_test

production:
  <<: *login
  database: somesite_production

使用命令行工具“createuser”在PostgreSQL中创建了名为“mylogin”的用户,该用户被授权创建数据库。postgresql.conf配置服务器监听本地主机。我已经尝试了许多关于pg_hba.conf的方法,但无论使用何种方法(ident、password、md5)连接127.0.0.1上的用户“mylogin”,都会认证失败——尽管我从未遇到过使用psql连接/创建数据库时出现问题的情况。
有什么线索吗?
编辑:好吧,我发现自己是多么愚蠢...我的用户密码根本没有设置!我想我忘记在

之后加上分号了。
ALTER USER xxxx WITH PASSWORD xxxx ;
...我通过请求“SELECT * FROM pg_shadow;”发现了这一点——密码字段为空。因为这个愚蠢的错误,我浪费了三天时间...
6个回答

20

我也曾经陷于这个问题很长时间,访问了各种链接(包括本帖中提供的链接)试图找到答案,但无济于事。然而,解决办法非常简单。虽然其他回答都指出了正确的方向,但以下是确切的解决步骤:

  1. 使用您喜欢的文本编辑器打开您的 pg_hba.conf 文件。(它位于 /etc/postgresql//main)

  2. 导航到以下行:

    # “local”仅适用于Unix域套接字连接

并在它的下面粘贴:

  local all         all                 trust

这将信任所有尝试连接到本地机器上的psql服务器的Unix用户。(有关列的功能的更多信息,请阅读页面顶部的文档)

  1. 保存pg_hba.conf文件并退出文本编辑器。

  2. 通过运行以下命令重新启动Postgresql服务器:

    service postgresql restart

  3. 现在尝试通过运行以下命令启动psql服务器:

    psql -d -U (或“psql”简写形式)

  4. 您应该可以无问题登录。

*注意: 假设您有一个有效的用于登录的psql用户名。如果没有,请按照以下链接设置一个:

设置用户: http://erikonrails.snowedin.net/?p=274

确保您有一个有效的postgres用户: http://archives.postgresql.org/pgsql-novice/2002-08/msg00072.php

列出所有现有的psql用户: 如果您正在寻找“LIST USERS”或“DISPLAY USERS”命令,则尝试:

“select * from pg_user;”(当登录到psql时)

祝好运!


4
谢谢,但这个问题已经有了一个被接受的答案... (问题只是我太蠢了 >.<)此外,我认为“嘿,让我们移除所有安全性并让所有本地用户进入”的解决方案不是很好,特别是当你与来自不同公司的许多其他用户共享服务器时。 - m_x
@m_x 是对的。这有点像用火箭筒打猎鸟。当然,你解决了问题,但也会带来其他问题。 - JaeGeeTee

4

好的,我发现我之前非常愚蠢...我的用户密码根本没有设置!我想我忘记在分号后面添加了。

ALTER USER xxxx WITH PASSWORD xxxx ;

我通过请求"SELECT * FROM pg_shadow;"看到了这个问题 - 密码字段为空。由于这个愚蠢的错误,我浪费了三天时间……


1
确保将密码转换为字符串... 因此您需要执行 ALTER USER xxxx WITH PASSWORD 'xxxx' ; - JaeGeeTee

2

我遇到了同样的问题。在我的database.yml文件中,用户名以大写字母开头,但在数据库中全部为小写。

解决方案:从postgres命令行创建用户时,它会将所有字母转换为小写。如果要使用大写字母,则必须使用双引号

示例:

create user AlbertEinstein; result = alberteinstein

对比:

create user "AlbertEinstein"; result = AlbertEinstein


老兄,我爱你,这帮了我大忙。 - gilmishal

0

谢谢回复,但正如我所说: “我已经尝试了很多在pg_hba.conf中的方法,但无论使用什么方法(ident、password、md5),都没有成功。” 此外,我不认为我的服务器管理员会高兴地看到我允许这个用户通过信任方式连接... 但是,感谢你的提示,我会尝试一下,如果我仍然无法连接,那就意味着其他地方出了问题。 - m_x

0
您需要在postgresql中给"myuser"授予权限"可以创建数据库对象"。
在pgadmin中,它看起来像这样:

enter image description here

调用rake db:create之后,您可以取消此特权。

谢谢,但正如我在问题结尾处所述(编辑),我的问题是由于纯粹的愚蠢导致的。我可能会补充一下,最近我又遇到了另一个错误:使用ruby >1.9.2时,似乎默认的YAML解析器目前存在问题,不支持合并("<<:")键。 - m_x

0
在我的情况下,我发现 pg_hba.conf 文件中稍后的 host 权限规则行覆盖了较早的 local 行。我正确地配置了 local 行以使用 md5 认证,但是 host 行设置为 ident,我将其更改为 md5
正如其他人在这里强调的那样,请注意使用 trust 是一种不安全的方法,因此您不应在任何生产部署中使用它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接