1. 程式人生 > >MacOS下postgresql資料庫密碼的那些事

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埠)都不需要手動輸入密碼了,但是其它使用者還是需要輸入密碼的.