[英]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),因此使我們能夠配置用戶映射,從而允許將服務器身份驗證為另一個系統用戶(從而利用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”執行的一樣,而無需輸入密碼。
嘗試運行以下命令,它將使apache連接到數據庫:
setsebool -P httpd_can_network_connect_db 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.