PostgreSQL忘記postgres賬號的密碼怎么辦?


 

PostgreSQL數據庫中,假如你忘記了postgres賬號的密碼或者由於工作交接問題,等交接到你手頭的時候,沒有postgres賬號密碼,那怎么辦呢?其實不用慌,像MySQL、SQL Server等數據庫一樣,只要你擁有操作系統權限,修改postgres超級賬號的密碼也非常方便簡單。下面測試環境為CentOS Linux release 7.2.1511 (Core), PostgreSQL數據庫版本為9.5。其它不同版本的操作其實是一樣的,只是略有細微差別。

 

 

1:定位pg_hba.conf文件位置

 

首先找到pg_hba.conf文件的位置,具體有下面這些方法:

 

 

方法1locate定位pg_hba.conf文件的位置 

$ locate pg_hba.conf
/usr/pgsql-9.5/share/pg_hba.conf.sample
/var/lib/pgsql/9.5/data/pg_hba.conf

 

 

方法2find命令查找。 

 

$  find / -name "pg_hba.conf" 2>&1 | grep -v "Permission denied"
/var/lib/pgsql/9.5/data/pg_hba.conf

 

 

 

2:修改pg_hba.conf配置文件

 

 

 修改pg_hba.conf前最好做一個備份,這是一個良好的習慣,避免回滾的時候,你能輕松回撤所有操作。

 

#cp  /var/lib/pgsql/9.5/data/pg_hba.conf  /var/lib/pgsql/9.5/data/pg_hba.conf.20210125

 

 pg_hba.conf中找到類似下面這樣的地方: 

# TYPE  DATABASE        USER            ADDRESS                 METHOD
 
# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                peer
#host    replication     postgres        127.0.0.1/32            ident
#host    replication     postgres        ::1/128                 ident
 
# Allow access from all host to connect to this UAT server
host    all             all             0.0.0.0/0               md5

 

 

關於修改pg_hba.conf,如果你打算以socket方式在本機登錄數據庫,那么只需修改local這條記錄,將pg_hba.conf中的這個選項的的值從md5修改為trust

 

 

 
修改前
# "local" is for Unix domain socket connections only
local   all             all                                     md5
 
修改后
# "local" is for Unix domain socket connections only
local   all             all                                     trust

 

 

trust表示允許可信的本地連接。此時連接數據庫不用輸入密碼。

 

 

 

小知識:

 

 

TYPE表示主機類型,它的取值有下面這些

 

local  :表示是unix-domainsocket連接

host   :表示TCP/IP socket 

hostssl: 表示SSL加密的TCP/IP socket

 

 

如果你打算以TCP/IP方式訪問數據庫,即psql -h127.0.0.1 -Upostgres這樣的方式,那么必須修改host的配置。具體如下所示:

 

修改前:
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
 
 
修改后:
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust

 

3: 重啟PostgreSQL服務

 

 

重啟PostgreSQL服務的方法很多,這里不做過多介紹,選擇你常用的方式即可。 

# service postgresql-9.5 stop
Redirecting to /bin/systemctl stop  postgresql-9.5.service
# service postgresql-9.5 start
Redirecting to /bin/systemctl start  postgresql-9.5.service
# service postgresql-9.5 status
Redirecting to /bin/systemctl status  postgresql-9.5.service

 

 

4:重置賬號postgres的密碼

 

 

使用psql無密碼登錄,修改用戶postgres的密碼

 

alter user postgres with password '新的密碼'; 

方式1:
 
#psql -U postgres
 
方式2:
 
#psql

 

關於兩者,如果ssh是用postgres用戶連接服務器的話,那么直接psql即可,如果是root用戶連接服務器的話,必須用psql -U postgres 

 
-bash-4.2$ psql
psql (9.5.6)
Type "help" for help.
 
postgres=# alter user postgres with password 'xxxxxxxx';
ALTER ROLE

 

 

5:恢復pg_hba.conf配置文件的修改

 

6:重啟PostgreSQL服務

 

 


免責聲明!

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



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