PostgreSQL 口令認(rèn)證

2021-08-31 15:09 更新

有幾種基于口令的認(rèn)證方法。這些方法的過程類似,但是區(qū)別在于用戶口令如何被存放在服務(wù)器上以及客戶端提供的口令如何被通過連接發(fā)送。

scram-sha-256

方法scram-sha-256按照RFC 7677中的描述執(zhí)行SCRAM-SHA-256認(rèn)證。它使用的是一種挑戰(zhàn)-響應(yīng)的方案,可以防止在不可信連接上對(duì)口令的嗅探并且支持在服務(wù)器上以一種加密哈希的方式存放口令,因此被認(rèn)為是安全的。

這是當(dāng)前提供的方法中最安全的一種,但是舊的客戶端庫不支持這種方法。

md5

方法md5使用一種自定義的安全性較低的挑戰(zhàn)-響應(yīng)機(jī)制。它能防止口令嗅探并且防止口令在服務(wù)器上以明文存儲(chǔ),但是無法保護(hù)攻擊者想辦法從服務(wù)器上竊取了口令哈希的情況。此外,現(xiàn)在認(rèn)為MD5哈希算法對(duì)于確定攻擊已經(jīng)不再安全。

md5方法不能與db_user_namespace特性一起使用。

為了簡化從md5方法到較新的SCRAM方法的轉(zhuǎn)變,如果在pg_hba.conf中指定了md5但是用戶在服務(wù)器上的口令是為SCRAM(見下文)加密的,則將自動(dòng)選擇基于SCRAM的認(rèn)證。

password

方法password以明文形式發(fā)送口令,因此它對(duì)于口令嗅探攻擊很脆弱。如果可能應(yīng)該盡量避免使用它。不過,如果連接被SSL加密保護(hù)著,那么可以安全地使用password(不過如果依靠SSL,SSL證書認(rèn)證可能是更好的選擇)。

PostgreSQL數(shù)據(jù)庫口令獨(dú)立于操作系統(tǒng)用戶口令。每個(gè)數(shù)據(jù)庫用戶的口令被存儲(chǔ)在pg_authid系統(tǒng)目錄中??诹羁梢杂?SQL 命令CREATE USERALTER ROLE管理,例如CREATE ROLE foo WITH LOGIN PASSWORD 'secret'或者psql\password命令。如果沒有為一個(gè)用戶設(shè)置口令,那么存儲(chǔ)的口令為空并且對(duì)該用戶的口令認(rèn)證總會(huì)失敗。

不同的基于口令的認(rèn)證方法的可用性取決于用戶的口令在服務(wù)器上是如何被加密(或者更準(zhǔn)確地說是哈希)的。這由設(shè)置口令時(shí)的配置參數(shù)password_encryption控制。如果口令使用scram-sha-256設(shè)置加密,那么它可以被用于認(rèn)證方法scram-sha-256password(但后一種情況中口令將以明文傳輸)。如上所釋,在這種情況下,指定的認(rèn)證方法md5將自動(dòng)切換到使用scram-sha-256方法。如果口令使用md5設(shè)置加密,那么它僅能用于md5password認(rèn)證方法說明(同樣,后一種情況中口令以明文傳輸)。(之前的PostgreSQL發(fā)行版支持在服務(wù)器上存儲(chǔ)明文口令?,F(xiàn)在已經(jīng)不可能了)。要檢查當(dāng)前存儲(chǔ)的口令哈希,可以參考系統(tǒng)目錄 pg_authid。

要把現(xiàn)有的安裝從md5升級(jí)到scram-sha-256,可以在確保所有在用的客戶端已經(jīng)足以支持SCRAM之后,在postgresql.conf中設(shè)置password_encryption = 'scram-sha-256',然后讓所有用戶設(shè)置新口令并且在 pg_hba.conf中將認(rèn)證方法說明改為scram-sha-256.


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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)