MacOS下postgresql資料庫密碼的那些事
如果你是第一次玩postgresql資料庫,你會發現你給role或者user明明設定了密碼,但在登入的時候毛都不用輸入,直接就進去了,怎麼那麼爽快!?
雖然爽快,但貌似不該這樣啊.
其實這些都和一個重要的檔案有關,它就是pg_hba.conf!
那麼這個檔案在哪呢?如果你是mac或是linux系統,你可以通過如下方式找到這個檔案:
ps aux|grep postgres
//你會發現輸出其中有-D的一行
apple 70988 0.0 0.2 2604888 8884 s001 S 2:05下午 0:00.54 /usr/local/Cellar/postgresql/9.4 .4/bin/postgres -D /usr/local/var/postgres
上面-D後面就是pg_hba.conf的位置所在,用編輯器開啟它,你會發現其中包含了詳細的說明文件.如果你不想鳥這些東東,你只要知道每一條都是一條策略,說明了訪問那些位置需要什麼樣的認證方式,比如:
local all all trust
說明了所有本地訪問都是受到信任的,在認證時是不需要輸入密碼的,像trust這一列稱為method,有很多種method,比如:
"trust", "reject", "md5", "password", "gss" , "sspi",
"ident", "peer", "pam", "ldap", "radius" or "cert"
有興趣的可以自行進一步研究下,那麼如果我希望在本地登入統統需要輸入密碼,你只要吧local最後的method改為password即可.你當然可以制定更加具體一點的策略:
host db_name user_name 10.10.10.1 password
比如以上策略表示通過socket連線,使用使用者user_name訪問地址10.10.10.1上的資料庫db_name需要輸入密碼!
ok!現在通過psql登入本地任何資料庫都需要輸入密碼啦,但是通過gui工具pgadmin登入還是不需要密碼,我們還需要修改另2條策略:
# IPv4 local connections:
#host all all 127.0.0.1/32 password
# IPv6 local connections:
#host all all ::1/128 password
因為pgadmin不是通過local來登入postgresql的.你還可以設定一條策略,就是所有通過網路來訪問的都要輸入密碼:
host all all samehost password
其中samehost程式碼任何host地址.
最後還要說另一個檔案.pgpass,這個檔案的目的是如果登入時需要輸入密碼,那麼你可以把對應的密碼寫在這裡,這樣你就可以直接登入了.
該檔案是在使用者的home目錄中,也可能開始並不存在,需要手動建立:
touch ~/.pgpass
chmode 0600 ~/.pgpass
後面一句是postgresql所要求的,增加安全性.
比如test使用者的密碼為pwd,則我們可以在.pgpass檔案中增加一行:
*:5432:*:test:pwd
那麼用test使用者訪問任何地址的任何資料庫(通過5432埠)都不需要手動輸入密碼了,但是其它使用者還是需要輸入密碼的.