【问题标题】:rake db:create fails, authentication problem with postgresql 8.4rake db:create 失败,postgresql 8.4 的身份验证问题
【发布时间】:2011-04-28 10:38:58
【问题描述】:

首先,请原谅我完全的菜鸟。我真的很想在那里找到解决方案,但现在我被卡住了,完全一无所知。

我正在尝试在远程服务器上部署 rails 3 应用程序;在我的本地 VM 上开发时,没有显示任何问题。但是现在,当我尝试运行时

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

用户“mylogin”已使用命令行工具“createuser”在 postgre 端创建。它被授权创建数据库。 postgresql.conf 将服务器配置为在 localhost 上侦听。 我已经用 pg_hba.conf 尝试了很多东西,但都没有奏效——无论在 127.0.0.1 上为用户“mylogin”使用的方法(身份、密码、md5)如何,身份验证都失败了——尽管我从来没有遇到过连接/创建数据库的问题psql.

有什么线索吗?

编辑:好吧,发现我是多么愚蠢……我的用户的密码根本没有设置! 我想我忘记了

之后的分号

使用密码 xxxx 更改用户 xxxx ;

...我通过请求“SELECT * FROM pg_shadow;”看到了这一点- 密码字段为空。因为这个愚蠢的错误,我浪费了三天的生命......

【问题讨论】:

    标签: ruby-on-rails authentication rake rails-postgresql


    【解决方案1】:

    我也被这个问题困扰了很长时间,并去了各种链接(包括这篇文章中提供的链接)试图找到答案,但无济于事。但是,解决方案非常简单。虽然许多其他响应都在正确的轨道上,但这里是解决问题的确切步骤:

    1. 在您选择的文本编辑器中打开您的 pg_hba.conf 文件。 (位于/etc/postgresql//main)

    2. 导航到显示如下的行:

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

    并粘贴到它下面:

      local all         all                 trust
    

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

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

    2. 运行以下命令重启 Postgresql 服务器:

      服务 postgresql 重启

    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 用户: 如果您正在寻找“列表用户”或“显示用户”命令,请尝试:

    "从 pg_user 中选择 *;" (登录psql时)

    祝你好运!

    【讨论】:

    • 谢谢,但这个问题已经得到了公认的答案......(问题只是我很愚蠢>。
    • @m_x 是对的。这有点像用火箭筒猎鸟。当然你解决了这个问题,但它会让你担心其他问题。
    【解决方案2】:

    好吧,发现我是多么愚蠢……我的用户的密码根本没有设置!我想我忘记了后面的分号

    ALTER USER xxxx WITH PASSWORD xxxx ;
    

    ...我通过请求“SELECT * FROM pg_shadow;”看到了这一点- 密码字段为空。因为这个愚蠢的错误,我浪费了三天的生命......

    【讨论】:

    • 确保您输入密码...这样您就可以使用ALTER USER xxxx WITH PASSWORD 'xxxx' ;
    【解决方案3】:

    我有同样的问题。在我的情况下,这是因为在我的 database.yml 文件中,用户名以大写字母开头,但在数据库中都是小写字母。

    解决方案: 从 postgres 命令行创建用户时,它将所有字母转换为小写。对于使用大写字母,必须使用double quotes

    示例:

    create user AlbertEinstein; result = alberteinstein

    create user "AlbertEinstein"; result = AlbertEinstein

    【讨论】:

    • 哥们,我爱你,这对我帮助很大
    【解决方案4】:

    这里有一些适合你的简明说明

    http://www.cyberciti.biz/faq/psql-fatal-ident-authentication-failed-for-user/.

    基本上你需要将localhost的身份验证方法设置为'trust'。

    【讨论】:

    • 感谢您的回复,但正如我所说:“我已经用 pg_hba.conf 尝试了很多东西,但都没有奏效——无论使用什么方法(ident、password、md5)”此外,我没有如果我允许此用户通过信任方法连接,我不相信我的服务器管理员会很高兴...但是,嘿,谢谢您的提示,我会尝试,如果我仍然无法连接,这意味着其他地方出了点问题。
    【解决方案5】:

    你需要在 postgresql 中赋予“myuser”权限“可以创建数据库对象”。

    在 pgadmin 中,它看起来像这样:

    调用 rake db:create 后,就可以拿走这个权限了。

    【讨论】:

    • 谢谢,但正如我的问题(编辑)末尾所述,我的问题是由于纯粹的愚蠢。我可能会补充一点,稍后我遇到了另一个错误:使用 ruby​​ >1.9.2 ,似乎默认的 YAML 解析器当前已损坏并且不支持合并 ("
    【解决方案6】:

    在我的例子中,我发现pg_hba.conf 文件中后面的host 权限规则行覆盖了前面的local 行。我正确配置了local 行以使用md5 身份验证,但host 行设置为ident,我将其更改为md5

    正如其他人在这里强调的那样,请注意使用trust 是一种不安全的方法,因此您不应在任何生产风格的部署中使用它。

    【讨论】:

      猜你喜欢
      • 2015-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-09
      相关资源
      最近更新 更多