Postgresql

為什麼無法重置 postgres 的密碼?

  • December 1, 2021

我可以在沒有密碼的情況下登錄 postgresql 數據庫:

sudo -u postgres psql

現在我想為 postgres 重置密碼“xxxxxxxx”:

sudo -u postgres psql
postgres=# ALTER USER postgres WITH PASSWORD 'xxxxxxxx';
ALTER ROLE
postgres=# \q
sudo passwd -d postgres
passwd: password expiry information changed.
sudo -u postgres passwd
New password: 
Retype new password: 
passwd: password updated successfully

現在重新啟動 postgresql:

sudo systemctl restart postgresql

issu1:無法使用以下命令登錄 postgres xxxxxxxx

psql -d postgres  -U postgres  -W
Password: 
psql: error: FATAL:  Peer authentication failed for user "postgres"

issu2: 為什麼不用密碼的使用者 postgres 仍然可以登錄 postgres?

sudo -u postgres psql

您的pg_hba.conf文件有一條規則,規定當嘗試與postgres數據庫使用者建立本地連接時,如果本地作業系統使用者也這樣做,它就會通過postgres。那就是peer認證方法。使用此方法,不會要求輸入密碼,並且如果您仍然提供密碼( -W選項),則會忽略密碼。

這解釋了問題#1 和#2。

解決方案是配置pg_hba.conf. 用or替換該peer方法(如果您使用的是最新的 Postgres 版本)即使對於本地連接也需要密碼,這似乎是您想要的。md5``scram-sha-256

引用自:https://dba.stackexchange.com/questions/303334