摘要:PostgresSQL設定外部用戶認證設定方式
最近我們公司接了一個新案,這個新案跟三年前結掉的一個案子相似度高達90%,基本上算是複製型的專案,差別只在於當時的人已經跑光了,這個案子資料庫是使用 PostgreSQL 對這資料庫我算不陌生,之前做中鋼的案子時,常常使用這資料庫,但是僅限使用不包含架設與管理,但是現在人事已非,之前的這方面的人都離開公司了,現在只能靠自己。
今天在安裝好了之後在本機測試正常,但是一旦從遠端登入的連線一慮登入不了,一開始第一直覺就是防火牆,於是把防火牆關掉,再連失敗,把防毒關掉,再連還是失敗,證實絕對不是防火牆的問題,所以應該是設定上有問題,上論壇爬文發現用 PostgresSQL 的人真的是少得可憐,要留文時間又不夠,所以只好自己看他的說明文件,幸好 PostgerSQL 的說明文件寫得真的不錯,拳拳到肉,沒有太多的花拳繡腿,不像MSD* 一樣一堆有的沒有的東西,看了只會越看越火有看好像沒有看一樣,還不如直接看範例,看了幾章終於看到「用戶認證」這章節,上面指示要到安裝目錄下開啟「pg_hba.conf」編輯,上面可編輯允許登入資料庫的電腦 IP 資訊(IP V4 / IP V6),如下圖:
上面的資料有包含下列幾種資訊:
-
TYPE:代表的是要連線的類型,基本上區分為下列幾種類型
- host:透過 TCP/IP 進行的連線嘗試。
- hostssl:使用 TCP/IP 的 SSL 進行的連線嘗試。要使用這個選項,安裝伺服器的時候必須開啟支援 SSL 連線。
- hostnossl:這個類型與 hostssl 剛好是相反的邏輯: 它只配給那些不使用 SSL 的 TCP/IP 連接請求。
- DATABASE:代表的是使用這條連線的人,可允許存取的資料庫,該設定可以直接輸入資料庫的名稱,或這是直接輸入「all」代表的是全部的資料庫都允許使用。
- USER:這條記錄用來聲明所配置 PostgreSQL 的用戶。如果當輸入的是「all」的資料,表示它可適用於所有用戶。
- CIDR-ADDRESS:這條記錄是用來配置的客戶端機器的 IP 位置或範圍。它必須是一個標準的十進制的 IP 地址和一個 CIDR 掩碼長度,輸入的方式為「IP位址或範圍/CIDR掩碼長度」之間不能有空白。CIDR表示式:它不是用來定義掩碼的長度,而是在另外一個字串裡定義實際的掩碼。 比如,255.0.0.0 資料表示 IPv4 CIDR 掩碼長度 8,而 255.255.255.255 資料表示 CIDR 掩碼長度 32。 這設定只適用於 host,hostssl 和 hostnossl 的類型。
- METHOD:連線認證的方式。可能有的選項如下:
-
trust:無條件地允許連線。這個方法允許任何可以與PostgreSQL 資料庫伺服器連線的用戶以他們期望的任意 PostgreSQL 資料庫用戶身份進行連線,而不需要指令。
- reject:連線無條件拒絕。常用於從一個組中"過濾"某些主機。
- md5:要求客戶端提供一個 MD5 加密的指令進行認證。
- crypt:要求客戶端提供一個 crypt() 加密的指令用於認證。 7.2 以前的客戶端只能支援 crypt。 對於 7.2 以及以後的客戶端,我們建議使用 md5。
- password:要求客戶端提供一個未加密的指令進行認證。 因為指令是以明文形式在網絡上傳遞的, 所以我們不應該在不安全的網絡上使用這個方式。
- krb4:用 Kerberos V4 認證用戶。只有在進行 TCP/IP 連線的時候才能用。
- krb5:用 Kerberos V5 認證用戶。只有在進行 TCP/IP 連線的時候才能用。
- ident:獲取客戶的操作系統名然後檢查一下,看看用戶是否允許以要求的資料庫用戶進行連線, 方法是參照在 ident 關鍵字後面聲明的映射。
- pam:使用操作系統提供的可插入的認證模塊服務 (PAM:Pluggable Authentication Modules) 來認證。
輸入完資料後最重要的是,還要再開啟資料庫 IPC/IP 的 Listen 服務,這服務要開啟必須要到安裝目錄下開啟「postgresql.conf」找到 Connection Settings 的地方有一行備註解起來的服務
#listen_addresses = "localhost"
首先要把這一行註解拿掉,再來是要輸入允許接收的電腦IP或名稱,使用「;」做為區隔符號,如果這服務被關閉預設是開啟「localhost」,但不對外開放,如果要連線的電腦數太多或只是在做測試的話,可以直接設定為「*」代表所有連線都接受,如下圖:
這兩項設定設定完畢後,重新啟動 PostgresSQL 的服務後,再重新連線,便可以直接連線了。