2017-08-11 66 views
0

我試圖通過結構腳本運行一些postgresql命令。當我執行該腳本,我得到:用戶在postgresql中的對等驗證失敗

out: psql: FATAL: Peer authentication failed for user "sparc2" 

這是我的pg_hba.conf文件看起來像:

# "local" is for Unix domain socket connections only 
local all    all          peer 
# IPv4 local connections: 
host all    all    127.0.0.1/32   md5 
# IPv6 local connections: 
host all    all    ::1/128     md5 
# Allow replication connections from localhost, by a user with the 
# replication privilege. 
#local replication  postgres        peer 
#host replication  postgres  127.0.0.1/32   md5 
#host replication  postgres  ::1/128     md5 
# added 
local sparc2   sparc2         md5 
host sparc2   sparc2   127.0.0.1/32   md5 
host sparc2   sparc2   10.0.2.2/32   md5 
host all    all    all     password 

我也有加入這一行修改postgresql.conf文件

listen_addresses = '*' 

應用更改後,我重新啓動postgresql。但錯誤仍然是一樣的。

+0

您是否真的添加了用戶(使用'CREATE USER'或等效方法)? – jcaron

+0

用戶通過一個ansible腳本創建: - 名稱: 「授予所有權限爲{{DB_USER}}」 變成:是 become_user:Postgres的 postgresql_privs: DB: 「{{DB_NAME}}」 角色:「{ {DB_USER}}」 PRIVS:ALL 類型:模式 的OBJ:公共 – user1919

+0

這是從pgAdmin的用戶規格:CREATE ROLE sparc2 LOGIN NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION; – user1919

回答

3

PostgreSQL有2連接入口點:

  1. TCP/IP(host pg_hba.conf中)
  2. Unix套接字(local pg_hba.conf中)

你的服務器被配置爲使用peer auth,它僅適用於Unix套接字,並且意味着 - 詢問內核操作系統用戶名是否與數據庫用戶名匹配。

,可以有以下選擇:

  • 變化pg_hba.conf使用md5 AUTH爲local套接字連接,或
  • 改變連接設置在腳本中使用IP連接(127.0.0.1應該工作),而不是插座連接。 [這可能不需要編輯文件 - 有時設置爲PGHOST變量已足夠],或者
  • 使您的腳本可以從操作系統用戶sparc2而不是postgres運行。

風險/弊端

  • 如果你改變的對MD5,從 「Postgres的」 OS用戶的身份運行,並依賴於 「對等」 的一些自動化腳本權威性,將停止工作。他們將開始詢問密碼
  • 如果您將peer更改爲md5並忘記數據庫超級用戶密碼,則可能必須重新啓用peer auth才能重置密碼。

通常,「peer」auth是OK。基於內核的本地認證的簡易性和安全性是很多發行版選擇本地管理連接的原因。它特別適用於多用戶shell服務器。您可以只針對選定的賬戶禁用它:

#CHANNEL DB USER  METHOD 
local  all sparc2 md5 
local  all all  peer 

更多細節:herehere

+0

太好了。非常感謝答案。第一個選項工作。我不是這些定製的專家。這樣做有風險嗎? – user1919

+1

@ user1919唯一的風險是將peer更改爲md5:依賴於「peer」auth的一些自動化腳本將停止工作。他們將開始要求密碼。 – filiprem

相關問題