最近試用PostgreSQL 9.04,將pg_hba.conf配置的一些心得分享。pg_hba.conf是客戶端認證配置文件,定義如何認證客戶端。
最近試用PostgreSQL 9.04,將pg_hba.conf配置的一些心得分享。
pg_hba.conf是客戶端認證配置文件,定義如何認證客戶端。
下面是常用的pg_hba.conf配置:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local 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”的優先級最低。
如下例:
local db1 user1 reject
local 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”。
------------------------------------華麗麗的分割線------------------------------------
CentOS 6.3環境下yum安裝PostgreSQL 9.3
PostgreSQL緩存詳述
Windows平臺編譯 PostgreSQL
Ubuntu下LAPP(Linux+Apache+PostgreSQL+PHP)環境的配置與安裝
Ubuntu上的phppgAdmin安裝及配置
CentOS平臺下安裝PostgreSQL9.3
PostgreSQL配置Streaming Replication集群
------------------------------------華麗麗的分割線------------------------------------
PostgreSQL 的詳細介紹:請點這里
PostgreSQL 的下載地址:請點這里
本文永久更新鏈接地址:
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com