W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
當(dāng)使用像 Ident 或者 GSSAPI 之類的外部認(rèn)證系統(tǒng)時(shí),發(fā)起連接的操作系統(tǒng)用戶名可能不同于要被使用的數(shù)據(jù)庫(kù)用戶(角色)。在這種情況下,一個(gè)用戶名映射可被用來把操作系統(tǒng)用戶名映射到數(shù)據(jù)庫(kù)用戶。要使用用戶名映射,在pg_hba.conf
的選項(xiàng)域指定map
=map-name
。此選項(xiàng)支持所有接收外部用戶名的認(rèn)證方法。由于不同的連接可能需要不同的映射,在
pg_hba.conf
中的map-name
參數(shù)中指定要被使用的映射名,用以指示哪個(gè)映射用于每個(gè)個(gè)體連接。
用戶名映射定義在 ident 映射文件中,默認(rèn)情況下它被命名為pg_ident.conf
并被存儲(chǔ)在集簇的數(shù)據(jù)目錄中(不過,可以把該映射文件放在其他地方,見ident_file配置參數(shù))。ident 映射文件包含的行的一般格式:
map-name
system-username
database-username
以在pg_hba.conf
中同樣的方式處理注釋和空白。map-name
是一個(gè)任意名稱,它將被用于在pg_hba.conf
中引用該映射。其他兩個(gè)域指定一個(gè)操作系統(tǒng)用戶名和一個(gè)匹配的數(shù)據(jù)庫(kù)用戶名。相同的map-name
可以被反復(fù)地用在同一個(gè)映射中指定多個(gè)用戶映射。
對(duì)于一個(gè)給定操作系統(tǒng)用戶可以對(duì)應(yīng)多少個(gè)數(shù)據(jù)庫(kù)用戶沒有限制,反之亦然。因此,一個(gè)映射中的項(xiàng)應(yīng)該被看成意味著“這個(gè)操作系統(tǒng)用戶被允許作為這個(gè)數(shù)據(jù)庫(kù)用戶連接”,而不是按時(shí)它們等價(jià)。如果有任何映射項(xiàng)把從外部認(rèn)證系統(tǒng)獲得的用戶名和用戶要求的數(shù)據(jù)庫(kù)用戶名配對(duì),該連接將被允許。
如果system-username
域以一個(gè)斜線(/
)開始,域的剩余部分被當(dāng)做一個(gè)正則表達(dá)式(PostgreSQL的正則表達(dá)式語法詳見第 9.7.3.1 節(jié))。正則表達(dá)式可以包括一個(gè)單一的捕獲,或圓括號(hào)子表達(dá)式,然后它可以在
database-username
域中以\1
(反斜線一)被引用。這允許在單個(gè)行中多個(gè)用戶名的映射,這特別有助于簡(jiǎn)單的語法替換。例如,這些項(xiàng)
mymap /^(.*)@mydomain\.com$ \1
mymap /^(.*)@otherdomain\.com$ guest
將為用戶移除以@mydomain.com
結(jié)束的系統(tǒng)用戶名的域部分,以及允許系統(tǒng)名以@otherdomain.com
結(jié)束的任意用戶作為guest
登入。
記住在默認(rèn)情況下,一個(gè)正則表達(dá)式可以只匹配字符串的一部分。如上例所示,使用^
和$
來強(qiáng)制匹配整個(gè)系統(tǒng)用戶名通常是明智的。
在啟動(dòng)以及主服務(wù)器進(jìn)程收到SIGHUP
信號(hào)時(shí),pg_ident.conf
文件會(huì)被讀取。 如果你在活動(dòng)的系統(tǒng)上編輯了該文件,你將需要通知 postmaster(使用pg_ctl reload
,調(diào)用SQL函數(shù)pg_reload_conf()
, 或用kill -HUP
)重新讀取文件。
例 20.2中展示了一個(gè)可以聯(lián)合pg_hba.conf
文件(例 20.1)使用的pg_ident.conf
文件。在這個(gè)例子中,對(duì)于任何登入到 192.168 網(wǎng)絡(luò)上的一臺(tái)機(jī)器的用戶, 如果該用戶沒有操作系統(tǒng)用戶名bryanh
、ann
或robert
,則他不會(huì)被授予訪問權(quán)限。只有當(dāng)
Unix 用戶robert
嘗試作為PostgreSQL用戶bob
(而不是作為robert
或其他人)連接時(shí),他才被允許訪問。ann
只被允許作為ann
連接。用戶
bryanh
被允許以bryanh
或者guest1
連接。
例 20.2. 一個(gè)示例 pg_ident.conf
文件
# MAPNAME SYSTEM-USERNAME PG-USERNAME
omicron bryanh bryanh
omicron ann ann
# bob 在這些機(jī)器上有用戶名 robert
omicron robert bob
# bryanh 也可以作為 guest1 連接
omicron bryanh guest1
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: