2011-04-05 64 views
5

开始在Ubuntu上使用postgresql开发我的第一个Ruby on Rails应用程序。我用密码创建了一个postgresql用户。在database.yml中,我输入了postgresql的用户名和密码。Ruby on Rails | Postgresql在database.yml中忽略我的密码

每当我运行一个rake数据库时:即使密码字段为空,迁移它也会执行而不会出现错误,无论我更改密码到database.yml中。如果我更改用户名,则会收到验证错误。

如何让Ruby on Rails数据库使用密码?

TIA

+0

'database.yml'文件是什么样的? postgre中的密码为我工作。 – Matchu 2011-04-05 01:53:24

回答

13

您可能正在使用ident或甚至trust身份验证。最常用的身份验证方法的快速概要:

  • trust - 您可以登录不管。
  • ident - 如果您的UNIX用户名与PostgreSQL用户名相同,则可以登录。
  • md5 - 如果您的密码(使用md5加密)是正确的,您可以登录。

编辑:的PostgreSQL 9.0引入的peer认证方法。从我收集的信息中,identpeer具有相同的用途—登录由您的操作系统用户名—确定,但ident与侦听端口113的ident服务器通信,而peer通过系统调用查找您的凭证。见http://www.postgresql.org/docs/9.1/static/auth-methods.html#AUTH-IDENT

找到您pg_hba.conf文件,看看是否能找到的东西,看起来像这样:

# TYPE DATABASE USER  CIDR-ADDRESS   METHOD 

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

当您尝试连接,PostgreSQL的经过此行由行。如果连接类型(例如local,host),数据库,用户(数据库用户,而不是系统用户)和地址都匹配,它将使用给定的认证方法。

如果你想需要密码才能访问自己的PostgreSQL用户,你可以在顶部添加一行这样的,local all all ident前行:

# TYPE DATABASE USER  CIDR-ADDRESS   METHOD 
local mydbname myusername      md5 

在变更后重新启动的PostgreSQL pg_hba.conf

+0

非常有帮助,谢谢。我创建了一个项目特定的数据库用户,并发现我需要授予'projectusername' MD5访问默认的'postgres'数据库以及三个Rails数据库。这允许'rake db:create:all'(在​​Rails 3.1下)创建Rails数据库。我写了详细信息[在这里](http://www.mcbsys.com/techblog/2011/10/set-up-postgresql-for-rails-3-1/)。 – 2011-10-07 21:43:27

1

我只勉强使用PostgreSQL的,但我知道它有一个叫sameuser功能。如果系统用户的名称与数据库用户的名称相匹配,则不需要密码。因此,如果我使用用户名“matchu”登录到此计算机,并且在PostgreSQL中有一个名为“matchu”的用户,我可以在没有额外身份验证的情况下登录到该数据库用户。

难道那是这里发生了什么?

+0

感谢您的信息 – user678604 2011-04-19 04:20:29