【问题标题】:How do I connect to a local postgres database without password from a script within Apache如何在没有密码的情况下从 Apache 中的脚本连接到本地 postgres 数据库
【发布时间】:2015-06-04 09:48:05
【问题描述】:

我有一个 Python 脚本,当 POST 请求发送到 Apache Webserver 时,它应该将一些数据加载到 postgres 中。在脚本中,系统用户 (dbuser) 用于连接到数据库(与 psql 配合使用)。然而,该脚本在 Apache 中执行时无法连接,返回以下错误:

Peer authentication failed for user dbuser

有没有办法让脚本在不提供用户密码的情况下进行连接?

【问题讨论】:

    标签: python apache postgresql cgi


    【解决方案1】:

    我找到的解决方案使用带有用户映射的身份验证。

    首先要注意的是,尽管脚本中提供了用户名,但当通过 Apache 连接时,该用户用于对等身份验证(失败,需要密码)。但是,请求访问 postgresql 的系统用户是运行 Apache(即 www-data)的用户,因此我们可以配置用户映射,允许以另一个系统用户身份向服务器进行身份验证(从而利用 ident 身份验证)。下面是配置文件内容:

    在 pg_ident.conf 我们配置用户映射:

    # MAPNAME      SYSTEM-USERNAME         PG-USERNAME
    web            www-data                dbuser
    web            dbuser                  dbuser
    

    在 pg_hba.conf 中,我们将地图作为选项添加到本地对等身份验证:

    # "local" is for Unix domain socket connections only
    # TYPE  DATABASE     USER    ADDRESS     METHOD
    local   all          all                 peer map=web
    

    重新加载服务器后,脚本可以访问数据库,就像直接以用户“dbuser”执行一样,无需密码。

    【讨论】:

      【解决方案2】:

      尝试运行以下命令,它将使 apache 连接到数据库:

      setsebool -P httpd_can_network_connect_db 1

      【讨论】:

      • 谢谢,但我没有在服务器上使用 SELinux,并且连接已经正常工作。它是不接受通过网络进行无密码身份验证的数据库。
      猜你喜欢
      • 1970-01-01
      • 2016-06-29
      • 2013-02-05
      • 1970-01-01
      • 2019-10-23
      • 2016-07-22
      • 2016-12-01
      • 2021-12-15
      • 1970-01-01
      相关资源
      最近更新 更多