PostgreSQL數據庫加密選項

參考翻譯自https://www.postgresql.org/docs/12/encryption-options.htmlhtml

18.8. 加密選項

PostgreSQL提供了多個級別的加密,並提供了靈活性,能夠防止因爲數據庫服務器盜竊,不道德的管理員和不安全的網絡而致使數據泄露。還可能用加密來保護敏感數據,例如病歷或財務交易。sql

密碼加密

數據庫中的用戶密碼以哈希值的方式儲存(由設置password_encryption選項決定), 所以管理員沒法肯定分配給用戶的實際密碼. 若是將SCRAM或MD5加密用於客戶端身份驗證, 未加密的密碼永遠不會臨時出如今服務器上,由於客戶端會在經過網絡發送以前對其進行加密. 推薦用SCRAM, 由於它是Internet標準,而且比PostgreSQL特定的MD5身份驗證協議更安全。數據庫

特定列的加密

pgcrypto模塊容許某些字段被加密存儲。若是隻有一些數據是敏感的,這將頗有用。客戶端提供解密密鑰,數據在服務器上解密,而後發送到客戶端。安全

解密的數據和解密密鑰會在客戶端和服務器之間進行解密和通訊時,短暫地出如今服務器上。這在這短暫的時刻數據和密鑰能夠被某個擁有對數據服務器徹底訪問權的人截獲,好比系統的管理員。服務器

數據分區加密

能夠在文件系統級別或塊級別執行存儲加密。Linux文件系統加密選項包括eCryptfs和EncFS,而FreeBSD使用PEFS。塊級或全盤加密選項包括Linux上的dm-crypt + LUKS和FreeBSD上的GEOM模塊geli和gbde。許多其餘操做系統也支持此功能,包括Windows。網絡

若是驅動器或整個計算機被盜,此機制可防止從驅動器中讀取未加密的數據。這在文件系統掛載時沒法防止攻擊,由於在文件系統掛載時,操做系統會提供未加密的數據視圖。可是,要掛載文件系統,您須要某種方式將加密密鑰傳遞給操做系統,有時密鑰會存儲在掛載磁盤的主機上的某個位置。post

網絡數據加密

SSL鏈接會加密經過網絡發送的全部數據:密碼,查詢和返回的數據。pg_hba.conf文件容許管理員指定哪些主機可使用非加密鏈接(host),哪些主機須要SSL加密的鏈接(hostssl)。此外,客戶端能夠指定僅經過SSL鏈接到服務器。ui

GSSAPI加密的鏈接對經過網絡發送的全部數據進行加密,包括查詢和返回的數據。(沒有密碼經過網絡發送。)pg_hba.conf文件容許管理員指定哪些主機可使用非加密鏈接(host),哪些主機須要GSSAPI加密的鏈接(hostgssenc)。此外,客戶端能夠指定僅經過GSSAPI加密的鏈接鏈接到服務器(gssencmode = require)。加密

Stunnel或SSH也能夠用於加密傳輸。操作系統

SSL主機認證

客戶端和服務器均可以相互提供SSL證書。它須要在每一側進行一些額外的配置,可是與僅使用密碼相比,它提供了更強大的身份驗證。它能夠防止計算機僞裝成爲服務器的時間足夠長,因此沒法讀取客戶端發送的密碼。它還有助於防止「中間人」攻擊,即客戶端和服務器之間的計算機冒充服務器,並在客戶端和服務器之間讀取和傳遞全部數據。

客戶端加密

若是沒法信任服務器計算機的系統管理員,則客戶端必須對數據進行加密;這樣,未加密的數據就永遠不會出如今數據庫服務器上。數據在發送到服務器以前先在客戶端上加密,而且數據庫結果在使用前必須在客戶端上解密。

相關文章
相關標籤/搜索