如何从Apache中的脚本连接到没有密码的本地postgres数据库

时间:2015-06-04 09:48:06

标签: python apache postgresql cgi

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

Peer authentication failed for user dbuser

有没有办法允许脚本连接而不提供用户密码?

2 个答案:

答案 0 :(得分: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中,我们将map作为选项添加到本地对等身份验证中:

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

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

答案 1 :(得分:0)

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

  

setsebool -P httpd_can_network_connect_db 1