我刚刚开始使用Ruby on Rails。我正在构建一个Hello World应用程序,而且我正在使用PostgreSQL。我使用以下命令创建应用程序:
rails new rails-hw -d postgresql
我使用createuser -s pguser
创建了一个数据库用户,并设置了密码。
我使用我创建的用户的用户名和密码编辑了config / database.yml的开发部分。但是,似乎我在database.yml文件中使用的密码并不重要,我的应用程序始终能够访问数据库中的数据。为什么忽略密码?
答案 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假定任何可以连接到服务器的人都有权使用他们指定的任何数据库用户名访问数据库(甚至是超级用户名)。当然,数据库和用户列中的限制仍然适用。只有在与服务器的连接上有足够的操作系统级保护时,才应使用此方法。