python - 如何在没有密码的情况下从 Apache 中的脚本连接到本地 postgres 数据库

标签 python apache postgresql cgi

我有一个 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”执行一样,无需密码。

关于python - 如何在没有密码的情况下从 Apache 中的脚本连接到本地 postgres 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30640530/

相关文章:

html - (HTTP) 在 URL 中隐藏页面扩展

apache - 不要在子域上应用重写引擎......?

sql - 如何从 postgres 中的同一张表中获取分层 json

python - 如何找到列表中某个数字的平均值[python]

python - 初学者 Python : AttributeError: 'list' object has no attribute

php - Docker 容器从另一个容器调用二进制文件

linux - 我应该在 Windows 或 Docker 命令行上运行 Docker 命令吗?

postgresql 文本搜索 : 2712 index size limit error

python - 如何在Python中将字符串列表转换为数组中的int列表

python - 我的代码的运行时复杂度是 O(a+b) 吗?