Ruby on Rails | Postgresql忽略了我在database.yml中的密码

时间:2011-04-05 01:52:40

标签: ruby-on-rails postgresql

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

每当我运行rake db:migrate时,无论我在database.yml中更改密码是什么,它都会无错误地执行 - 即使密码字段为空。如果我更改用户名,我会收到身份验证错误。

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

TIA

2 个答案:

答案 0 :(得分:14)

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

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

编辑: PostgreSQL 9.0引入了peer身份验证方法。根据我的收集,identpeer具有相同的目的 - 您的登录由您的操作系统用户名确定 - 但ident与侦听端口113的ident服务器进行通信,而peer 1}}通过系统调用查找您的凭据。见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逐行完成。如果连接类型(例如localhost),数据库,用户(数据库用户,非系统用户)和地址都匹配,则它将使用给定的身份验证方法。

如果您想要一个密码来访问您自己的PostgreSQL用户,您可以在local all all ident行之前的顶部添加这样的行:

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

更改pg_hba.conf后,请务必重启PostgreSQL。

答案 1 :(得分:1)

我几乎没有使用PostgreSQL,但我确实知道它有一个名为sameuser的功能。如果系统用户的名称与数据库用户的名称匹配,则不需要密码。因此,如果我使用用户名“matchu”登录此计算机,并且PostgreSQL中有一个名为“matchu”的用户,我可以登录该数据库用户而无需其他身份验证。

这可能是这里发生的事情吗?