PostgreSQL的 pg_hba.conf 檔案簡析,

來源:互聯網
上載者:User

PostgreSQL的 pg_hba.conf 檔案簡析,

最近試用PostgreSQL 9.04,將pg_hba.conf配置的一些心得分享。

pg_hba.conf是用戶端認證設定檔,定義如何認證用戶端。

下面是常用的pg_hba.conf配置:

12345678910 # TYPE  DATABASE  USER  CIDR-ADDRESS  METHOD  # "local" is for Unix domain socket connections onlylocal    all      all                 ident  # IPv4 local connections:host     all      all   127.0.0.1/32  md5  # IPv6 local connections:host     all      all   ::1/128       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”的優先順序最低。

如下例:

12 local    db1    user1    rejectlocal    all      all        ident

這兩條都是指定local訪問方式,因為前一條指定了特定的資料庫db1,

所以後一條的all代表的是除了db1之外的資料庫,同理使用者的all也是這個道理。

USER指定哪個資料庫使用者(PostgreSQL正規的叫法是角色,role)。多個使用者以逗號分隔。

CIDR-ADDRESS項local方式不必填寫,該項可以是IPv4地址或IPv6地址,可以定義某台主機或某個網段。

METHOD指定如何處理用戶端的認證。常用的有ident,md5,password,trust,reject。

ident是Linux下PostgreSQL預設的local認證方式,凡是能正確登入伺服器的作業系統使用者(註:不是資料庫使用者)就能使用本使用者映射的資料庫使用者不需密碼登入資料庫。

使用者對應檔為pg_ident.conf,這個檔案記錄著與作業系統使用者匹配的資料庫使用者,如果某作業系統使用者在本檔案中沒有映射使用者,則預設的映射資料庫使用者與作業系統使用者同名。

比如,伺服器上有名為user1的作業系統使用者,同時資料庫上也有同名的資料庫使用者,user1登入作業系統後可以直接輸入psql,以user1資料庫使用者身份登入資料庫且不需密碼。

很多初學者都會遇到psql -U username登入資料庫卻出現“username ident 認證失敗”的錯誤,明明資料庫使用者已經createuser。

原因就在於此,使用了ident認證方式,卻沒有同名的作業系統使用者或沒有相應的映射使用者。

解決方案:1、在pg_ident.conf中添加映射使用者;

2、改變認證方式。

md5是常用的密碼認證方式,如果你不使用ident,最好使用md5。

密碼是以md5形式傳送給資料庫,較安全,且不需建立同名的作業系統使用者。

password是以純文字密碼傳送給資料庫,建議不要在生產環境中使用。

trust是只要知道資料庫使用者名稱就不要求輸入密碼或ident就能登入,建議不要在生產環境中使用。

reject是拒絕認證。

 

本地使用psql登入資料庫,是以unix通訊端的方式,附合local方式。

使用PGAdmin3或php登入資料庫,不論是否本地均是以TCP/IP方式,附合host方式。如果是本地(資料庫地址localhost),

CIDR-ADDRESS則為127.0.0.1/32。

 

例:

允許本地使用PGAdmin3登入資料庫,資料庫地址localhost,使用者user1,資料庫user1db:

  host    user1db    user1    127.0.0.1/32    md5

允許10.1.1.0~10.1.1.255網段登入資料庫:

  host    all    all    10.1.1.0/24    md5

信任192.168.1.10登入資料庫:

  host    all    all    192.168.1.10/32    trust

 

pg_hba.conf修改後,使用pg_ctl reload重新讀取pg_hba.conf檔案,如果pg_ctl找不到資料庫,則用-D /.../pgsql/data/ 指定資料庫目錄,或export PGDATA=/.../pgsql/data/ 匯入環境變數。

 

另: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”。




相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.