rake db:创建失败,postgresql 8.4的身份validation问题
首先,请原谅我的完全无声。 我真的试图找到一个解决方案,但现在我陷入困境,完全无能为力。
我正在尝试在远程服务器上部署rails 3应用程序; 在我的本地VM上开发时,没有问题。 但现在,当我试图跑
rake db:create
它失败了,有错误(这里翻译,因为我是法国人):
FATAL : password authentication failed for user <>
这是我的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”在postgre-side创建了用户“mylogin”。 它被授权创建dbs。 postgresql.conf配置服务器监听localhost。 我用pg_hba.conf尝试了很多东西,没有用 – 无论在127.0.0.1上用户“mylogin”使用的方法(ident,密码,md5),身份validation都失败了 – 尽管我从未遇到过连接/创建dbs的问题PSQL。
任何线索?
编辑:好的,发现我是多么令人难以置信的愚蠢…我的用户的密码根本没有设置! 我想我忘记了分号了
ALTER USER xxxx WITH PASSWORD xxxx;
…我通过请求“SELECT * FROM pg_shadow;”看到了这一点。 – 密码字段为空。 由于这个愚蠢的错误,我浪费了三天的生命……
我也被困在这个问题很长一段时间了,并且去了各种各样的链接(包括这篇文章中提供的链接)试图找到答案,但无济于事。 但是,解决方案非常简单。 虽然许多其他答案都在正确的轨道上,但这里是解决问题的确切步骤:
-
在您选择的文本编辑器中打开您的pg_hba.conf文件。 (它位于/ etc / postgresql // main)
-
导航到以下行:
#“local”仅适用于Unix域套接字连接
并粘贴在它下面:
local all all trust
这将信任所有尝试连接到本地计算机上的psql服务器的unix用户。 (有关列function的更多信息,请阅读页面顶部的文档)
-
保存pg_hba.conf文件并退出文本编辑器。
-
运行以下命令重新启动Postgresql服务器:
service postgresql restart
-
现在尝试通过运行以下命令启动psql服务器:
psql -d -U(或简称“psql”)
-
你应该能够毫无问题地登录。
*注意:所有这些都假设您有一个有效的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时)
祝好运!
好吧,发现我是多么令人难以置信的愚蠢…我的用户的密码根本没有设置! 我想我忘记了分号了
ALTER USER xxxx WITH PASSWORD xxxx ;
…我通过请求“SELECT * FROM pg_shadow;”看到了这一点。 – 密码字段为空。 由于这个愚蠢的错误,我浪费了三天的生命……
我有同样的问题。 在我的情况下,这是因为在我的database.yml文件中,用户名以大写字母开头,但在数据库中它全是小写的。
解决方案:从postgres命令行创建用户时,它会将所有字母转换为小写。 对于使用大写字母,必须使用双引号 。
例:
create user AlbertEinstein; result = alberteinstein
VS
create user "AlbertEinstein"; result = AlbertEinstein
以下是一些适合您的简明说明
http://www.cyberciti.biz/faq/psql-fatal-ident-authentication-failed-for-user/ 。
基本上,您需要将localhost的身份validation方法设置为“trust”。
您需要在postgresql中为“myuser”提供“可以创建数据库对象”的权限。
在pgadmin中,它看起来像这样:
在调用rake db:create之后,您可以取消此权限。
在我的例子中,我发现pg_hba.conf
文件中的后续host
权限规则行已经覆盖了早期的local
行。 我正确配置local
线路以使用md5身份validation,但host
线路设置为ident
,我将其更改为md5
正如其他人在此强调的那样,请注意使用trust
是一种不安全的方法,因此您不应在任何生产方式部署中使用它。