PostgreSQL pg_hba.conf 檔案解析以及忘記密碼的處理方法
阿新 • • 發佈:2019-02-07
pg_hba.conf是客戶端認證配置檔案,定義如何認證客戶端。
下面是常用的pg_hba.conf配置:
TYPE定義了多種連線PostgreSQL的方式,分別是:“local”使用本地unix套接字,“host”使用TCP/IP連線(包括SSL和非SSL),“host”結合“IPv4地址”使用IPv4方式,結合“IPv6地址”則使用IPv6方式,“hostssl”只能使用SSL TCP/IP連線,“hostnossl”不能使用SSL TCP/IP連線。
DATABASE指定哪個資料庫,多個數據庫,庫名間以逗號分隔。“all”只有在沒有其他的符合條目時才代表“所有”,如果有其他的符合條目則代表“除了該條之外的”,因為“all”的優先順序最低。如下例:
USER指定哪個資料庫使用者(PostgreSQL正規的叫法是角色,role)。多個使用者以逗號分隔。
CIDR-ADDRESS項local方式不必填寫,該項可以是IPv4地址或IPv6地址,可以定義某臺主機或某個網段。
METHOD指定如何處理客戶端的認證。常用的有ident,md5,password,trust,reject:
1)ident是Linux下PostgreSQL預設的local認證方式,凡是能正確登入伺服器的作業系統使用者(注:不是資料庫使用者)就能使用本使用者對映的資料庫使用者不需密碼登入資料庫。使用者對映檔案為pg_ident.conf,這個檔案記錄著與作業系統使用者匹配的資料庫使用者,如果某作業系統使用者在本檔案中沒有對映使用者,則預設的對映資料庫使用者與作業系統使用者同名。比如,伺服器上有名為user1的作業系統使用者,同時資料庫上也有同名的資料庫使用者,user1登入作業系統後可以直接輸入psql,以user1資料庫使用者身份登入資料庫且不需密碼。很多初學者都會遇到psql -U username登入資料庫卻出現“username ident 認證失敗”的錯誤,明明資料庫使用者已經createuser。原因就在於此,使用了ident認證方式,卻沒有同名的作業系統使用者或沒有相應的對映使用者。解決方案:1、在pg_ident.conf中新增對映使用者;2、改變認證方式。
2)md5是常用的密碼認證方式,如果你不使用ident,最好使用md5。密碼是以md5形式傳送給資料庫,較安全,且不需建立同名的作業系統使用者。
3)password是以明文密碼傳送給資料庫,建議不要在生產環境中使用。
4)trust是隻要知道資料庫使用者名稱就不需要密碼或ident就能登入,建議不要在生產環境中使用。
5)reject是拒絕認證。
例:
1、允許本地使用PGAdmin3登入資料庫,資料庫地址localhost,使用者user1,資料庫user1db:
host user1db user1 127.0.0.1/32 md5
2、允許10.1.1.0~10.1.1.255網段登入資料庫:
host all all 10.1.1.0/24 md5
3、信任192.168.1.10登入資料庫:
host all all 192.168.1.10/32 trust
pg_hba.conf修改後,使用pg_ctl reload重新讀取pg_hba.conf檔案
另:PostgreSQL預設只監聽本地埠,用netstat -tuln只會看到“tcp 127.0.0.1:5432 LISTEN”。修改postgresql.conf中的listen_address=*,監聽所有埠,這樣遠端才能通過TCP/IP登入資料庫,用netstat -tuln會看到“tcp 0.0.0.0:5432 LISTEN”。
在瞭解完這些以後,如果我們使用者忘掉了密碼
修改data目錄下的 pg_hba.conf 檔案
local all all md5=>修改成trust
儲存退出,然後使用pg_ctl reload重新讀取pg_hba.conf檔案,使配置生效
進入postgresql資料庫
alter user postgres with password '你要設定的密碼';
然後再把pg_hba.conf修改的trust改回原來的md5
下面是常用的pg_hba.conf配置:
# TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 md5 # Allow replication connections from localhost, by a user with the # replication privilege. #local replication enterprisedb md5 #host replication enterprisedb 127.0.0.1/32 md5 #host replication enterprisedb ::1/128 md5 host all all 10.211.55.4/32 md5 host all all 10.211.55.2/32 md5
TYPE定義了多種連線PostgreSQL的方式,分別是:“local”使用本地unix套接字,“host”使用TCP/IP連線(包括SSL和非SSL),“host”結合“IPv4地址”使用IPv4方式,結合“IPv6地址”則使用IPv6方式,“hostssl”只能使用SSL TCP/IP連線,“hostnossl”不能使用SSL TCP/IP連線。
DATABASE指定哪個資料庫,多個數據庫,庫名間以逗號分隔。“all”只有在沒有其他的符合條目時才代表“所有”,如果有其他的符合條目則代表“除了該條之外的”,因為“all”的優先順序最低。如下例:
這兩條都是指定local訪問方式,因為前一條指定了特定的資料庫db1,所以後一條的all代表的是除了db1之外的資料庫,同理使用者的all也是這個道理。local db1 user1 reject local all all ident
USER指定哪個資料庫使用者(PostgreSQL正規的叫法是角色,role)。多個使用者以逗號分隔。
CIDR-ADDRESS項local方式不必填寫,該項可以是IPv4地址或IPv6地址,可以定義某臺主機或某個網段。
METHOD指定如何處理客戶端的認證。常用的有ident,md5,password,trust,reject:
1)ident是Linux下PostgreSQL預設的local認證方式,凡是能正確登入伺服器的作業系統使用者(注:不是資料庫使用者)就能使用本使用者對映的資料庫使用者不需密碼登入資料庫。使用者對映檔案為pg_ident.conf,這個檔案記錄著與作業系統使用者匹配的資料庫使用者,如果某作業系統使用者在本檔案中沒有對映使用者,則預設的對映資料庫使用者與作業系統使用者同名。比如,伺服器上有名為user1的作業系統使用者,同時資料庫上也有同名的資料庫使用者,user1登入作業系統後可以直接輸入psql,以user1資料庫使用者身份登入資料庫且不需密碼。很多初學者都會遇到psql -U username登入資料庫卻出現“username ident 認證失敗”的錯誤,明明資料庫使用者已經createuser。原因就在於此,使用了ident認證方式,卻沒有同名的作業系統使用者或沒有相應的對映使用者。解決方案:1、在pg_ident.conf中新增對映使用者;2、改變認證方式。
2)md5是常用的密碼認證方式,如果你不使用ident,最好使用md5。密碼是以md5形式傳送給資料庫,較安全,且不需建立同名的作業系統使用者。
3)password是以明文密碼傳送給資料庫,建議不要在生產環境中使用。
4)trust是隻要知道資料庫使用者名稱就不需要密碼或ident就能登入,建議不要在生產環境中使用。
5)reject是拒絕認證。
例:
1、允許本地使用PGAdmin3登入資料庫,資料庫地址localhost,使用者user1,資料庫user1db:
host user1db user1 127.0.0.1/32 md5
2、允許10.1.1.0~10.1.1.255網段登入資料庫:
host all all 10.1.1.0/24 md5
3、信任192.168.1.10登入資料庫:
host all all 192.168.1.10/32 trust
pg_hba.conf修改後,使用pg_ctl reload重新讀取pg_hba.conf檔案
另:PostgreSQL預設只監聽本地埠,用netstat -tuln只會看到“tcp 127.0.0.1:5432 LISTEN”。修改postgresql.conf中的listen_address=*,監聽所有埠,這樣遠端才能通過TCP/IP登入資料庫,用netstat -tuln會看到“tcp 0.0.0.0:5432 LISTEN”。
在瞭解完這些以後,如果我們使用者忘掉了密碼
修改data目錄下的 pg_hba.conf 檔案
local all all md5=>修改成trust
儲存退出,然後使用pg_ctl reload重新讀取pg_hba.conf檔案,使配置生效
進入postgresql資料庫
alter user postgres with password '你要設定的密碼';
然後再把pg_hba.conf修改的trust改回原來的md5