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

问题描述:

我刚开始使用Ruby on Rails的。我正在构建一个Hello World应用程序,并使用PostgreSQL。我用下面的命令来创建应用程序:我的Ruby on Rails应用程序如何在没有密码的情况下访问数据库?

rails new rails-hw -d postgresql 

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

我编辑的配置/ database.yml中的显影部,使用I创建的用户的用户名和密码。然而,似乎有什么我在database.yml文件中使用的密码并不重要,我的应用程序总是能够访问数据库中的数据。为什么忽略密码?

+0

事实上,你可以从'database.yml'删除密码。 –

因为你当前的Postgres安装配置为允许从本地主机连接。

检查pg_hba.conf最有可能,你会发现这样的事情:

# TYPE DATABASE USER  IP-ADDRESS IP-MASK    METHOD 
host all   all   127.0.0.1  255.255.255.255  trust 

这基本上说“允许所有Postgres的用户和数据库从127.0.0.1所有连接。”

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

看看你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假设任何人谁可以连接到服务器被授权访问他们所指定的任何数据库的用户名(甚至超级用户名)数据库。当然,数据库和用户列中的限制仍然适用。只有在服务器连接有足够的操作系统级保护时才应使用此方法。