PostgreSQL 在多個層級提供加密,並在保護資料免於因資料庫伺服器遭竊、不擇手段的管理員和不安全的網路而洩漏方面提供彈性。 加密可能還需要保護敏感資料,例如醫療記錄或金融交易。
資料庫使用者密碼會儲存為雜湊值(由設定 password_encryption 決定),因此管理員無法判斷指派給使用者的實際密碼。 如果 SCRAM 或 MD5 加密用於用戶端驗證,則未加密的密碼甚至永遠不會暫時出現在伺服器上,因為用戶端會在透過網路傳送之前將其加密。 建議使用 SCRAM,因為它是網際網路標準,並且比 PostgreSQL 專用的 MD5 驗證協定更安全。
pgcrypto 模組允許將某些欄位儲存為加密的。 如果只有部分資料是敏感的,這會很有用。 用戶端提供解密金鑰,資料在伺服器上解密,然後傳送給用戶端。
解密的資料和解密金鑰會在解密並在用戶端和伺服器之間傳輸時,在伺服器上短暫存在。 這會出現一個短暫的時刻,資料和金鑰可能會被完全存取資料庫伺服器的人攔截,例如系統管理員。
儲存加密可以在檔案系統層級或區塊層級執行。 Linux 檔案系統加密選項包括 eCryptfs 和 EncFS,而 FreeBSD 使用 PEFS。 區塊層級或完整磁碟加密選項包括 Linux 上的 dm-crypt + LUKS 和 FreeBSD 上的 GEOM 模組 geli 和 gbde。 許多其他作業系統都支援此功能,包括 Windows。
如果磁碟機或整部電腦被盜,此機制可防止從磁碟機讀取未加密的資料。 這無法防止在檔案系統掛載時發生的攻擊,因為在掛載時,作業系統會提供未加密的資料檢視。 但是,若要掛載檔案系統,您需要某種方式將加密金鑰傳遞到作業系統,有時金鑰會儲存在掛載磁碟的主機上的某個位置。
SSL 連線會加密透過網路傳送的所有資料:密碼、查詢和傳回的資料。 pg_hba.conf
檔案允許管理員指定哪些主機可以使用未加密的連線 (host
),以及哪些主機需要 SSL 加密的連線 (hostssl
)。 此外,用戶端可以指定它們僅透過 SSL 連線到伺服器。
GSSAPI 加密的連線會加密透過網路傳送的所有資料,包括查詢和傳回的資料。(沒有密碼會透過網路傳送。)pg_hba.conf
檔案允許管理員指定哪些主機可以使用未加密的連線 (host
),以及哪些主機需要 GSSAPI 加密的連線 (hostgssenc
)。 此外,用戶端可以指定它們僅透過 GSSAPI 加密的連線連線到伺服器 (gssencmode=require
)。
也可以使用 Stunnel 或 SSH 來加密傳輸。
用戶端和伺服器都可以彼此提供 SSL 憑證。 這需要在每一端進行一些額外的設定,但這提供了比僅僅使用密碼更強的身分驗證。 它可防止電腦偽裝成伺服器,僅僅是為了讀取用戶端傳送的密碼。 它還有助於防止「中間人」攻擊,即用戶端和伺服器之間的電腦偽裝成伺服器,並讀取和傳遞用戶端和伺服器之間的所有資料。
如果無法信任伺服器機器的系統管理員,則用戶端必須加密資料;這樣,未加密的資料永遠不會出現在資料庫伺服器上。 資料會在傳送到伺服器之前在用戶端上加密,並且必須在使用之前在用戶端上解密資料庫結果。
如果您在文件中發現任何不正確、與特定功能的使用經驗不符或需要進一步澄清的地方,請使用此表單回報文件問題。