我的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文件中使用的密码并不重要,我的应用程序总是能够访问数据库中的数据。为什么忽略密码?
答
因为你当前的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假设任何人谁可以连接到服务器被授权访问他们所指定的任何数据库的用户名(甚至超级用户名)数据库。当然,数据库和用户列中的限制仍然适用。只有在服务器连接有足够的操作系统级保护时才应使用此方法。
事实上,你可以从'database.yml'删除密码。 –