8

first things first, please excuse my utter noobness. I really tried to find a solution out there, but now i'm stuck and completely clueless.

i'm trying to deploy a rails 3 app on a distant server ; when developping on my local VM, no problem showed. But now, when i try to run

rake db:create

it fails, with error (here translated, since i'm french):

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

here's my 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

the user "mylogin" has been created postgre-side with the command-line tool "createuser". It's authorized to create dbs. postgresql.conf configures the server to listen on localhost. I've tried many things with pg_hba.conf, none worked - whatever the method used (ident, password, md5) for user "mylogin" on 127.0.0.1, authentication fails - though i've never had problems connecting / creating dbs with psql.

any clue ?

EDIT: okay, found out how incredibly stupid i've been... the password for my user was simply not set ! I think i forgot the semicolon after

ALTER USER xxxx WITH PASSWORD xxxx ;

... i saw this by requesting "SELECT * FROM pg_shadow;" - the password field was empty. Three days of my life wasted because of this dumb mistake...

4

6 回答 6

20

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

  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 用户:如果您正在寻找“LIST USERS”或“DISPLAY USERS”命令,请尝试:

“从 pg_user 中选择 *;” (登录到 psql 时)

祝你好运!

于 2012-02-11T21:12:17.043 回答
3

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

ALTER USER xxxx WITH PASSWORD xxxx ;

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

于 2011-10-08T15:02:32.137 回答
2

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

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

例子:

create user AlbertEinstein; result = alberteinstein

对比

create user "AlbertEinstein"; result = AlbertEinstein

于 2013-06-29T13:40:18.740 回答
0

以下是一些适合您的简明说明

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

基本上,您需要将 localhost 的身份验证方法设置为“信任”。

于 2011-05-02T03:59:05.777 回答
0

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

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

在此处输入图像描述

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

于 2011-05-26T07:54:48.473 回答
0

就我而言,我发现文件中后面的host权限规则行pg_hba.conf覆盖了前面的local行。我正确地将local线路配置为使用 md5 身份验证,但host线路设置为ident我更改为md5

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

于 2017-02-12T19:56:33.490 回答