標籤:
平常工作中,有時需要遠端串連 PostgreSQL 資料庫做些維護,例如遠端備份等;如果備份指令碼寫在遠端機器,備份的時候會彈出密碼輸入提示,那麼指令碼就不能後台執行,這裡總結了幾種不彈出密碼輸入提示的方法。
--測試環境
目標庫IP: 192.168.1.25/5432 ; 資料庫: Mydb ;使用者名稱:postgres
用戶端IP: 192.168.1.26
--在 192.168.1.26 串連資料庫 Mydb , 彈出密碼提示
[email protected]> psql -h 192.168.1.25 -p 5432 Mydb postgres
Password for user postgres:
方法一:設定環境變數 PGPASSWORD
PGPASSWORD 是 PostgreSQL 系統內容變數,在用戶端設定這後,那麼在用戶端串連遠端資料庫時,將優先使用這個密碼。
--測試
[email protected]> export PGPASSWORD=mypassword
[email protected]> 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
--串連測試
[email protected]> 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
[[email protected]]$ 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
--用戶端再次串連測試
[email protected]> 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 上沒有檢查這個檔案的許可權。)
設定用戶端串連PostgreSQL不要求輸入密碼