標籤:
在 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檔案中尋找匹配資訊,如果沒有,依然需要手動輸入密碼
PostgreSQL 自動輸入密碼