Next Previous Contents

10. 資料庫保安

資料庫保安問題需在多個不同層面探討︰

10.1 用戶認證

認證是後端伺服器和 postmaster 確保要求存取資料的用戶是否確為其人的過程。所有啟動 Postgres 的用者都與認證是後端伺服器和 postmaster pg_user 類別比較,以確定他們有權做想做的工作。 而用者真實身分的辨別工作以多個不同方法完成︰

10.2 依據主機控制存取

依據主機控制存取即 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 認證方法將會被使用。(參閱 認證方法

10.3 認證方法

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

10.4 存取控制

Postgres 提供了限制其他用家存取自己資料的機制。

10.5 經 SSH 的保安 TCP/IP 連接

你可用 ssh 來加密客戶和 Postgres 伺服器間的網絡連接。做得正確的話,這樣可形成一個保安的網絡連接。

ssh 的文件提供了大部份開始時需要的資料。請參閱 http://www.heimhardt.de/htdocs/ssh.html 以加深了解。逐步解釋只需兩步。

經 ssh 形成一條保安通道︰ 逐步解釋只需兩步。

10.6 Kerberos 認證

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)(srvtabkeytab)可被 postgres 用戶讀到。籍設定 src/Makefile.global 檔的 KRBVERS 變數,Postgres 或其客戶程式可編譯為使用 MIT Kerberos 通訊協定的第四或五版。你也可改變 Postgres 期望找到相關函式庫、標頭檔和自己的伺服器鍵碼檔的位置。編譯完後, Postgres 要登記為一個 Kerberos 服務。請參閱 Kerberos Operations Notes 和相關 manual pages 以取得有關登記服務的詳情。

操作︰ 安裝之後,Postgres 在各方面應如一般 Kerberos 服務運作。要知道認證的使用方法,請參閱 PostgreSQL User's Guide 有關 postmasterpsql 的章節。

在 Kerberos 第五版掛釣 (hooks),對用戶和服務命名作了以下假設(也請參閱以下表格)。


                表格︰Kerberos 參數例子
 ------------------------------------------------------
 參數       例子 
 ------------------------------------------------------
 user       frew@S2K.ORG
 user       aoki/HOST=miyu.S2K.Berkeley.EDU@S2K.ORG
 host       postgres_dbms/ucbvax@S2K.ORG
 ------------------------------------------------------


Next Previous Contents