資料庫保安問題需在多個不同層面探討︰
認證是後端伺服器和 postmaster 確保要求存取資料的用戶是否確為其人的過程。所有啟動 Postgres 的用者都與認證是後端伺服器和 postmaster pg_user 類別比較,以確定他們有權做想做的工作。而用者真實身分的辨別工作以多個不同方法完成︰
依據主機控制存取即 PostgreSQL 用於決定什麼客戶可存取資料庫和他們如何確認身份的過程。每個資料庫都有一個名為 pg_hba.conf 的檔案,在它的 $PGDATA 目錄中,它控制誰能存取資料庫。每個存取資料庫的用戶都要在 pg_hba.conf 中有相應的紀錄。否則所有來自該客戶的連接都會以"User authemtication failed" 錯誤訊息被拒。
請參閱 pg_hba.conf(5) 的 man page(man 5 pg_hba.conf)。
pg_hba.conf 檔的基本格式是一組紀錄,一行一個。空行或以 hash 字母(#)開始的行則不理會。一個紀錄由一些用空格和 / 或 Tab 分開的欄位組成。
從客戶來的連接可經 Unix 插座或互網網插座(即 TCP/IP)。來自 Unix 插座的連接用以下格式的記錄控制︰
local database authentication method
database 指定本紀錄用於哪個資料庫。all 代表它適用於所有資料庫。
authentication method 指定用戶在使用 Unix 插座時用來認證的方法。不同的方法容後詳述。
來自互聯網插座的連接用以下格式的記錄控制︰
host database TCP/IP-address TCP/IP-mask authentication method
TCP/IP 地址會 邏輯上 and'ed 到指定的 TCP/IP 罩和客戶的 TCP/IP 地址。如兩者相等,這紀錄會用於這個連接。如果一個連接符合超過一個紀錄,檔案中的第一個紀錄會被使用。不論 TCP/IP 地址還是 TCP/IP 罩都是以分點的十進數格式 (dotted decimal notation) 表達。如果一個連接和所有紀錄都不符,reject 認證方法將會被使用。(參閱 認證方法)
Unix 和 TCP/IP 插座都支援以下認證方法︰
以下認證方法只受 TCP/IP 插座支援︰
這裡有一些例子︰
# 信任所有來自 Unix 插座的連接。 local trust # 信任所有這部電腦經 TCP/IP 來的連接。 host all 127.0.0.1 255.255.255.255 trust # 我們討厭這部電腦。 host all 192.168.0.10 255.255.255.0 reject # 這部電腦不懂加密,所以我們要純文字的密碼。 host all 192.168.0.3 255.255.255.0 password # 這群電腦的其他成員都要提供加密了的密碼。 host all 192.168.0.0 255.255.255.0 crypt
Postgres 提供了限制其他用家存取自己資料的機制。
你可用 ssh 來加密客戶和 Postgres 伺服器間的網絡連接。做得正確的話,這樣可形成一個保安的網絡連接。
ssh 的文件提供了大部份開始時需要的資料。請參閱 http://www.heimhardt.de/htdocs/ssh.html 以加深了解。逐步解釋只需兩步。
經 ssh 形成一條保安通道︰ 逐步解釋只需兩步。
ssh -L 3333:wit.mcs.anl.gov:5432 postgres@wit.mcs.anl.gov
psql -h localhost -p 3333 -d mpw
Kerberos 是一個業界標準的保安認證系統,適用於經過公用網絡的分散式系統。
如何取得 Kerberos 認證系統並不隨同 Postgres 散佈。不同版本的 Kerberos 多以可供選擇的軟件的形式自作業系統廠商得到。此外,原程式碼的發行版本 (distribution) 可自 MIT Project Athena 得到。
注意︰即使你使廠商提供了 Kerberos,你仍可能想用 MIT 版,因為一些廠商的版本被故意弄壞以致不能和 MIT 版本合作。
有關 Kerberos 的查詢可提交你的廠商或 MIT Project Athena。注意 FAQLs(常問問題名單,Frequently-Asked Questions Lists) 會被定時寄至 Kerberos 通信論壇(寄信去訂閱),和 USENET 新聞組。
安裝︰ 安裝 Kerberos 在 Kerberos Installation Notes 中已詳細說明。要確定伺服器鍵碼檔 (key file)(srvtab 或 keytab)可被 Postgres 用戶讀到。籍設定 src/Makefile.global 檔的 KRBVERS 變數,Postgres 或其客戶程式可編譯為使用 MIT Kerberos 通訊協定的第四或五版。你也可改變 Postgres 期望找到相關函式庫、標頭檔和自己的伺服器鍵碼檔的位置。編譯完後,Postgres 要登記為一個 Kerberos 服務。請參閱 Kerberos Operations Notes 和相關 manual pages 以取得有關登記服務的詳情。
操作︰ 安裝之後,Postgres 在各方面應如一般 Kerberos 服務運作。要知道認證的使用方法,請參閱 PostgreSQL User's Guide 有關 postmaster 和 psql 的章節。
在 Kerberos 第五版掛釣 (hooks),對用戶和服務命名作了以下假設(也請參閱以下表格)。
表格︰Kerberos 參數例子 ------------------------------------------------------ 參數 例子 ------------------------------------------------------ user frew@S2K.ORG user aoki/HOST=miyu.S2K.Berkeley.EDU@S2K.ORG host postgres_dbms/ucbvax@S2K.ORG ------------------------------------------------------