?
This document uses PHP Chinese website manual Release
當(dāng)使用像Ident或者GSSAPI外部認證系統(tǒng)時,操作系統(tǒng)用戶的名稱發(fā)起連接可能不同于它需要連接數(shù)據(jù)庫的用戶。 在這種情況下,一個用戶名映射可用于映射的操作系統(tǒng)用戶名到 數(shù)據(jù)庫用戶。使用用戶名映射,在pg_hba.conf選項字段, 指定map=map-name。 此選項支持所有接收外部的用戶名的認證方法。 由于不同的映射可能需要為不同的連接,在pg_hba.conf中map-name參數(shù)指定使用的映射名, 標(biāo)識映射用于每個獨立連接。
用戶名映射定義在ident映射文件中,默認情況下,被命名為pg_ident.conf存儲在集群的數(shù)據(jù)目錄中。(這可能是放置映射文件的其他地方,參閱ident_file配置文件。)ident映射文件包含一般格式的行:
map-name system-username database-username
以在pg_hba.conf中同樣的方式處理注釋和空白。map-name是一個任意名稱,習(xí)慣在pg_hba.conf中提及這種映射。其他兩個字段指定操作系統(tǒng)的用戶名和匹配數(shù)據(jù)庫的用戶名。相同的map-name可以在單一映射中反復(fù)使用指定多個用戶映射。
關(guān)于多少數(shù)據(jù)庫用戶和給定的 操作系統(tǒng)的用戶對應(yīng),這些沒有限制,反之亦然。 因此,記錄映射應(yīng)該看作意味著"這個操作系統(tǒng)允許連接該數(shù)據(jù)庫的用戶",而不是意味著他們等價。如果有任何映射條目,從外部認證系統(tǒng)獲得的用戶名與已要求用戶連接的數(shù)據(jù)庫用戶名搭配,連接將被允許。
如果system-username字段開始用斜線(/), 字段其余部分將被視為一個正則表達式。(參閱Section 9.7.3.1PostgreSQL正則表達式語法的詳細描述。)正則表達式可以包括一個單一的捕獲,或帶括號的子表達式,然后可參考database-username 作為\1(反斜杠一)。這允許單行多用戶名映射特別有用于簡單的語法替換。 例如,這些條目
mymap /^(.*)@mydomain\.com$ \1 mymap /^(.*)@otherdomain\.com$ guest
將刪除以@mydomain.com結(jié)束的系統(tǒng)用戶名使用者,以及 允許以@otherdomain.com結(jié)束以guest登錄的任何系統(tǒng)名稱用戶的部分字段。
Tip: 請記住,默認情況下,一個正則表達式可以匹配部分字符串。 使用^ and $通常是明智的, 正如上面的例子所示,迫使匹配整個系統(tǒng)的用戶名。
當(dāng)主服務(wù)器進程接收一個SIGHUP 信號,pg_ident.conf文件讀取啟動。 如果您在主系統(tǒng)編輯文件,您將需要傳達到郵局(使用pg_ctl reload或者kill -HUP),使重新讀取該文件。
pg_ident.conf文件結(jié)合pg_hba.conf文件中使用。 Example 19-1顯示在Example 19-2中。 在這個例子中,任何人都可以登錄到192.168網(wǎng)絡(luò)的一臺機器上, 沒有操作系統(tǒng)用戶名bryanh, ann或者 robert不會被授予訪問權(quán)限。 當(dāng)他設(shè)法連接PostgreSQL用戶bob 而不是robert或者其他任何人時,Unix用戶robert將只被允許訪問。 ann只允許連接ann。用戶bryanh允許連接bryanh或者guest1。
Example 19-2. An example pg_ident.conf file pg_ident.conf文件的一個例子
# MAPNAME SYSTEM-USERNAME PG-USERNAME omicron bryanh bryanh omicron ann ann # bob has user name robert on these machines omicron robert bob # bryanh can also connect as guest1 omicron bryanh guest1