我的Ruby on Rails应用程序如何在没有密码的情况下访问数据库?

时间:2016-04-25 07:22:48

标签: ruby-on-rails postgresql

我刚刚开始使用Ruby on Rails。我正在构建一个Hello World应用程序,而且我正在使用PostgreSQL。我使用以下命令创建应用程序:

rails new rails-hw -d postgresql

我使用createuser -s pguser创建了一个数据库用户,并设置了密码。

我使用我创建的用户的用户名和密码编辑了config / database.yml的开发部分。但是,似乎我在database.yml文件中使用的密码并不重要,我的应用程序始终能够访问数据库中的数据。为什么忽略密码?

2 个答案:

答案 0 :(得分:1)

因为您当前的Postgres安装配置为允许来自localhost的连接。

检查你的ArrayReader,你最有可能找到这样的东西:

pg_hba.conf

其中基本上说“允许所有Postgres用户和数据库的连接来自127.0.0.1。”

更多细节可以在文档中找到:http://www.postgresql.org/docs/9.1/static/auth-pg-hba-conf.html(参见示例20-1)

答案 1 :(得分:0)

看看你的pg_hba.conf。它可能包含对本地用户的特殊处理(来自同一台机器的连接):

# Database administrative login by Unix domain socket
local   all             all                                     trust

# TYPE  DATABASE        USER            ADDRESS                 METHOD

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

在那里查看那些trust方法?这就是不需要密码的原因。来自documentation

  

当指定trust身份验证时,PostgreSQL假定任何可以连接到服务器的人都有权使用他们指定的任何数据库用户名访问数据库(甚至是超级用户名)。当然,数据库和用户列中的限制仍然适用。只有在与服务器的连接上有足够的操作系统级保护时,才应使用此方法。