有幾種基於密碼的認證方法。這些方法操作類似,但在使用者密碼如何在伺服器上儲存以及客戶端提供的密碼如何透過連線傳送方面有所不同。
scram-sha-256
方法 scram-sha-256
執行 SCRAM-SHA-256 認證,如 RFC 7677 所述。它是一種挑戰-響應機制,可以防止在不安全的連線上進行密碼竊聽,並支援以加密雜湊形式在伺服器上儲存密碼,這種形式被認為是安全的。
這是目前提供的最安全的方法,但舊的客戶端庫不支援它。
md5
方法 md5
使用一種自定義的、安全性較低的挑戰-響應機制。它可以防止密碼竊聽,並避免在伺服器上以明文形式儲存密碼,但如果攻擊者設法從伺服器竊取密碼雜湊,則無法提供任何保護。此外,MD5 雜湊演算法如今已不再被認為是能夠抵禦惡意攻擊的。
為了方便從 md5
方法過渡到較新的 SCRAM 方法,如果在 pg_hba.conf
中指定了 md5
作為方法,但伺服器上的使用者密碼是為 SCRAM 加密的(見下文),那麼將自動選擇基於 SCRAM 的認證。
對 MD5 加密密碼的支援已棄用,並將在未來的 PostgreSQL 版本中移除。有關遷移到另一種密碼型別的詳細資訊,請參閱下文。
password
方法 password
以明文形式傳送密碼,因此容易受到密碼“竊聽”攻擊。如果可能,應始終避免使用它。然而,如果連線受到 SSL 加密的保護,則可以安全地使用 password
。(不過,如果依賴使用 SSL,SSL 證書認證可能是更好的選擇)。
PostgreSQL 資料庫密碼與作業系統使用者密碼是分開的。每個資料庫使用者的密碼儲存在 pg_authid
系統目錄中。密碼可以使用 SQL 命令 CREATE ROLE 和 ALTER ROLE 進行管理,例如,CREATE ROLE foo WITH LOGIN PASSWORD 'secret'
,或使用 psql 命令 \password
。如果未為使用者設定密碼,則儲存的密碼為 null,並且該使用者的密碼認證將始終失敗。
不同基於密碼的認證方法的可用性取決於使用者在伺服器上的密碼是如何加密(更準確地說,是雜湊)的。這由設定密碼時的時間點配置引數 password_encryption 控制。如果密碼是使用 scram-sha-256
設定加密的,則可用於 scram-sha-256
和 password
認證方法(但在後一種情況下,密碼傳輸將是明文的)。在本例中,認證方法規範 md5
將自動切換到使用 scram-sha-256
方法,如上所述,因此它也將工作。如果密碼是使用 md5
設定加密的,則只能用於 md5
和 password
認證方法規範(同樣,在後一種情況下,密碼以明文形式傳輸)。(以前的 PostgreSQL 版本支援在伺服器上以明文形式儲存密碼。現在已不再可能。)要檢查當前儲存的密碼雜湊,請參見系統目錄 pg_authid
。
要將現有安裝從 md5
升級到 scram-sha-256
,在確保所有使用的客戶端庫都足夠新以支援 SCRAM 後,在 postgresql.conf
中設定 password_encryption = 'scram-sha-256'
,讓所有使用者設定新密碼,並在 pg_hba.conf
中將認證方法規範更改為 scram-sha-256
。
如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用 此表格 報告文件問題。