2012-08-11 92 views
2

這是我pg_hba.conf相關部分:pg_hba.conf中的「local」和「localhost」連接類型有什麼區別?

# TYPE DATABASE  USER   ADDRESS     METHOD 

# "local" is for Unix domain socket connections only 
local all    all          ident 
# IPv4 local connections: 
host all    all    127.0.0.1/32   ident 
# IPv6 local connections: 
host all    all    ::1/128     ident 

的pidentd服務正在運行。

當我嘗試登錄到EE1(我假設,默認用戶是Postgres的):

psql ee1 

它說: 「對等身份驗證失敗,用戶Postgres的」

  1. 我在哪裏配置peer驗證「postgres」?這是ident

  2. 當我改變pg_hba.conf以下行:

    local all    all         ident 
    

    local all    all         md5 
    

    它要求我輸入密碼,我可以登錄爲什麼是它更改到本地連接類型,對postgres用戶有影響?

回答

3

ident認證意味着您的操作系統用戶與數據庫用戶匹配。它僅支持TCP/IP連接,如relevant entry in docs states。如果使用Unix套接字,將使用Peer authentication方法。

此外,請注意,默認用戶不是postgres,而是您當前登錄的用戶。

+0

我用我自己的用戶名登錄到我的系統,那麼爲什麼說「用戶'postgres'的對等身份驗證失敗」 – Daud 2012-08-13 07:38:07

2

local是pg_hba.conf中使用的連接類型,而localhost是網絡地址用於本地環回並轉換爲IPv4地址127.0.0.1,或IPv6 ::1
我引用the manual about pg_hba.conf

當地

此記錄使用Unix域套接字連接嘗試相匹配。沒有這種類型的記錄,Unix域套接字連接是 不允許的。

主機

這條記錄匹配使用TCP/IP的連接請求。主機記錄匹配SSL或非SSL連接嘗試。

注意:除非服務器以listen_addresses配置參數的適當值啓動,否則遠程TCP/IP連接將不可能,因爲缺省行爲僅在上偵聽TCP/IP連接,本地環回地址本地主機。

在PostgreSQL中的GUC* listen_addresses。CONF,localhost也作爲設置:
* GUC:Grand Unified Configuration

的默認值是本地主機,它允許進行僅本地TCP/IP 「迴環」 連接。

大膽重視我的。

+0

我指定md5爲'主機'連接類型(帶有環回地址) 'psql ee1',它從來沒有要求我輸入密碼,但是當我爲'本地'連接類型指定md5時,它開始詢問我輸入密碼。這是爲什麼 ?我如何知道我是使用Unix套接字來訪問本地主機還是使用TCP/IP訪問本地主機? – Daud 2012-08-13 08:28:03

+1

@Daud:如果你本地連接(例如,在同一臺機器上使用'psql'),'pg_hba.conf'中'host'的設置無效,並且'local'連接類型的設置是相關的。當您不在連接中提供網絡地址時(因此,本地連接),您將自動使用Unix套接字。 – 2012-08-13 18:33:55

相關問題