如何在没有密码的情况下从 Apache 中的脚本连接到本地 postgres 数据库
How do I connect to a local postgres database without password from a script within Apache
我有一个 Python 脚本,当 POST 请求发送到 Apache Web 服务器时,它应该将一些数据加载到 postgres 中。在脚本中,系统用户 (dbuser) 用于连接到数据库(与 psql 一起工作正常)。但是,脚本在 Apache 中执行时无法连接,返回以下错误:
Peer authentication failed for user dbuser
有没有办法允许脚本在不提供用户密码的情况下连接?
我找到的解决方案使用用户映射的身份验证。
首先要注意的是,虽然脚本中提供了用户名,但当通过 Apache 连接时,该用户用于对等身份验证(失败,需要密码)。但是,请求访问 postgresql 的系统用户是 运行 Apache(即 www-data),因此我们可以配置用户映射,允许作为另一个系统用户向服务器进行身份验证(从而利用身份验证).下面是配置文件内容:
在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"执行一样访问数据库,无需密码。
尝试运行下面的命令,它将使 apache 连接到数据库:
setsebool -P httpd_can_network_connect_db 1
我有一个 Python 脚本,当 POST 请求发送到 Apache Web 服务器时,它应该将一些数据加载到 postgres 中。在脚本中,系统用户 (dbuser) 用于连接到数据库(与 psql 一起工作正常)。但是,脚本在 Apache 中执行时无法连接,返回以下错误:
Peer authentication failed for user dbuser
有没有办法允许脚本在不提供用户密码的情况下连接?
我找到的解决方案使用用户映射的身份验证。
首先要注意的是,虽然脚本中提供了用户名,但当通过 Apache 连接时,该用户用于对等身份验证(失败,需要密码)。但是,请求访问 postgresql 的系统用户是 运行 Apache(即 www-data),因此我们可以配置用户映射,允许作为另一个系统用户向服务器进行身份验证(从而利用身份验证).下面是配置文件内容:
在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"执行一样访问数据库,无需密码。
尝试运行下面的命令,它将使 apache 连接到数据库:
setsebool -P httpd_can_network_connect_db 1