PostgreSQL 自動輸入密碼


在 Shell 命令行中,使用 postgresql-client 連接 PostgreSQL 數據庫時,每次都要輸入密碼。如果要寫 Shell Script,做一些類似於備份的自動化管理工作,每次都還要手動輸入密碼是一件讓人很不爽的事情,也沒有實現真正意義上的自動化。

 

何如在連接 PostgreSQL 數據庫時,不用手動輸入密碼,官方利用密碼文件(Password File)提供了一種解決方案:

Unix/Linux 在用戶家目錄創建一個 .pgpass 隱藏文件或者是創建一個環境變量 PGPASSFILE 引用一個含有密碼信息的文件(文件內容同 .pgpass 文件,此處文件名可隨意,隱不隱藏都行),Windows 對應的是 %APPDATA%\postgresql\pgpass.conf 文件( %APPDATA% 是用戶配置里面的 Application Data 子目錄)。

該文件記錄着連接數據庫需要的所有信息,按下面數據格式,每行一條記錄信息:

hostname:port:database:username:password

該文件中可以有注釋內容,注釋符號是 # 。

前四個字段可以是確定的字面值,也可以使用通配符 * 匹配所有。

連接數據庫的時候,系統自動從前到后遍歷該文件,使用最先匹配到的記錄,因此,當你在文件中使用了通配符 * 的時候,應該優先把最具體的信息放在文件的最前面。

如果記錄信息中包含 : 或 \ 這兩個符號,需要對其進行轉義,就是在字符前面加轉義符號 \ 。

 

在 Unix/Linux 系統中 .pgpass 文件權限只能對用戶自己開放,不能對用戶組和其他人開放,就是說 .pgpass 文件對用戶組和其他人是"不可讀,不可寫,不可執行"的,通常會賦予 .pgpass 文件權限 600 ,命令如下:

chmod 0600 ~/.pgpass

如果任何一個權限對用戶組或其他人開放了,該文件就會被忽略。

利用環境變量 PGPASSFILE 引用的文件權限也要滿足這個要求,否則同樣會被忽略。

在 Windows 中,會假設該文件存放在一個安全的目錄中,所有沒有對其權限進行特別的檢查。

 

至此,數據庫對應的 .pgpass 文件設置完成,以后再連接數據庫就不需要手動輸入密碼了,Shell Script 也能夠實現真正意義上的自動化管理。

psql -h 10.150.10.150 -p 5432 -U postgres -d dbname  -- 到.pgpass文件中尋找匹配信息,如果沒有,依然需要手動輸入密碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM