PostgreSQL 用戶名映射

2021-08-31 15:05 更新

當(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、annrobert,則他不會(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


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)