設定客戶端連線PostgreSQL不需要密碼

guyuanli發表於2015-03-12

平常工作中,有時需要遠端連線 PostgreSQL 資料庫做些維護,例如遠端備份等;如果備份指令碼寫在遠端機器,備份的時候會彈出密碼輸入提示,那麼指令碼就不能後臺執行,這裡總結了幾種不彈出密碼輸入提示的方法。


--測試環境
目標庫IP:  192.168.1.25/5432 ; 資料庫: Mydb ;使用者名稱:postgres
客戶端IP:  192.168.1.26

-- 192.168.1.26  連線資料庫 Mydb , 彈出密碼提示
postgres@linux-> psql -h 192.168.1.25 -p 5432 Mydb postgres
Password for user postgres:

 

方法一:設定環境變數 PGPASSWORD   

PGPASSWORD  是 PostgreSQL 系統環境變數,在客戶端設定這後,那麼在客戶端連線遠端資料庫時,將優先使用這個密碼。


--測試
postgres@linux-> export PGPASSWORD=mypassword                

postgres@linux-> psql -h 192.168.1.25 -p 5432 Mydb postgres
psql (8.4.4)
Type "help" for help.                          
                                                       
Mydb=> \q             

     備註:設定環境變數  PGPASSWORD ,連線資料庫不再彈出密碼輸入提示。 但是從安全性方面考慮,這種方法並不推薦。


方法二:設定 .pgpass 密碼檔案
       
透過在客戶端 /home/postgres 目錄下建立隱藏檔案 .pgpass ,從而避免連線資料庫時彈出密碼輸入提示。

--建立密碼檔案 .pgpass ( on 客戶端 )                               
vi /home/postgres/.pgpass       
                                     
--格式                                                               
hostname:port:database:username:password                             
                                                                     
--範例                                                               
192.168.1.25:5432:Mydb:postgres:mypassword                                   
                                                                     
--許可權                                                               
Chmod 600 .pgpass                  

--連線測試
postgres@linux-> psql -h 192.168.1.25 -p 5432 Mydb postgres

psql (8.4.4)
Type "help" for help.                          
                                                       
Mydb=>

      備註:在/home/postgres 目錄建立了密碼檔案 .pgpass 檔案後,並正確配置連線資訊,那麼客戶端連線資料時會優先使用 .pgass檔案, 並使用匹配記錄的密碼,從而不跳出密碼輸入提示,這種方法比方法一更安全,所以推薦使用建立 .pgpass 檔案方式。                                

                               
方法三:修改伺服器端 pg_hba.conf

修改認證檔案 $PGDATA/pg_hba.conf, 新增以下行, 並 reload使配置立即生效。
     
host    Mydb         postgres            192.168.0.0/24           trust

[postgres@linux]$ pg_ctl reload -D $PGDATA / service postgresql reload
server signaled

--伺服器端 pg_hba.conf 的配置
# IPv4 local connections:
host    all             all                 127.0.0.1/32               trust
host    Mydb        postgres       192.168.0.0/24           trust
host    all             all                  0.0.0.0/0                    md5

--客戶端再次連線測試
postgres@linux-> psql -h 192.168.1.25 -p 5432 Mydb postgres

psql (8.4.4)
Type "help" for help.    

Mydb=> \q

     備註:修改服務端 pg_hba.conf reload 後,不再彈出密碼輸入提示。

 

引用官方說明文件:

使用者家目錄中的 .pgpass 或者 PGPASSFILE 引用的檔案是一個可包含口令的檔案。如果連線要求口令(並且沒有用其它方法宣告口令),那麼可以用它。在 Microsoft Windows 上,檔名字是 %APPDATA%\postgresql\pgpass.conf (這裡的 %APPDATA% 指使用者配置裡的 Application Data 子目錄)。

這個檔案應該有下面這樣的格式行:

hostname:port:database:username:password

頭四個欄位每個都可以是一個文字值,或者 *,它匹配所有的東西。第一個匹配當前連線引數的口令行的口令域將得以使用。(因此,如果你使用了萬用字元,那麼應該把最具體的記錄放在前面。)如果記錄包含 : 或者 \ ,應該用 \ 逃逸。一個 localhost 的主機名匹配來自本機的 host(TCP)和 local (Unix 域套接字)。

.pgpass 的許可權必須不允許任何全域性或者同組的使用者訪問;我們可以用命令 chmod 0600 ~/.pgpass 實現這個目的。如果許可權比這個松,這個檔案將被忽略。(不過目前在 Microsoft Windows 上沒有檢查這個檔案的許可權。)

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7490392/viewspace-1457501/,如需轉載,請註明出處,否則將追究法律責任。

相關文章