【问题标题】:How is my Ruby on Rails app able to access the database without the password?我的 Ruby on Rails 应用程序如何在没有密码的情况下访问数据库?
【发布时间】:2016-08-18 11:20:26
【问题描述】:

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

rails new rails-hw -d postgresql

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

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

【问题讨论】:

  • 其实可以把@​​987654323@的密码去掉。

标签: ruby-on-rails postgresql


【解决方案1】:

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

检查您的pg_hba.conf,您很可能会找到类似的内容:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2010-10-23
      • 2014-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-08
      • 1970-01-01
      • 2023-01-25
      • 2013-08-04
      相关资源
      最近更新 更多