我有一个Python脚本,当POST请求发送到Apache Webserver时,应该将一些数据加载到postgres中。在脚本中,系统用户(dbuser)用于连接数据库(使用psql可以正常工作)。但是,当在Apache中执行脚本时,该脚本无法连接,返回以下错误:
Peer authentication failed for user dbuser
有没有办法允许脚本连接而不提供用户密码?
答案 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