PostgreSQL中允許哪些IP的機器能夠訪問數據庫是由配置文件pg_hba.conf控制的,通過配置該文件,能夠指定哪些ip可以訪問,哪些ip不可以訪問,以及訪問的認證方式。hba是host-based authentication的縮寫。
原文地址:
https://mytecdb.com/blogDetail.php?id=77
initdb在初始化數據目錄的時候,會生成一個默認的pg_hba.conf文件。pg_hba.conf文件格式由多條記錄組成,每條記錄佔一行,#開頭爲註釋,這些記錄控制着客戶端訪問數據庫的權限和認證方式。
先看一個PostgreSQL默認生成的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 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
1. 語法
local <dbname> <user> <auth-method> [auth-options]
host <dbname> <user> <ip/masklen> <auth-method> [auth-options]
例子:
本地socket連接
local all all trust
IPv4本地連接
host all all 127.0.0.1/32 trust
允許所有IP使用md5加密的口令訪問
host all all 0.0.0.0/0 md5
2. 字段取值詳解
2.1 第一個字段,主機類型
- local,匹配本地socket方式連接數據庫
- host,匹配TCP/IP網絡協議連接,包括SSL和非SSL
- hostssl,匹配TCP/IP網絡協議連接,必須是SSL加密的連接
- hostnossl,匹配TCP/IP網絡協議連接,必須非SSL加密的
2.2 第二個字段,數據庫名稱
一行記錄的第二個字段,用於設置一個數據庫名稱,設置all表示可以匹配任何數據庫,設置爲replication表示允許流複製,而不是一個名叫“replication”的數據庫。
2.3 第三個字段,用戶名稱
一行記錄的第三個字段,表示一個用戶名稱,設置爲all,匹配所有用戶。
2.4 第四個字段,IP地址
一行記錄的第四個字段,<ip/masklen>表示允許哪些IP地址來訪問,也可以匹配ip段,如192.168.56.0/24。配置爲0.0.0.0/0 表示匹配任意IP。
2.5 第五個字段,認證方式
一行記錄的第五個字段,表示驗證方法,常用的有trust,reject,md5,ident等。
- trust,無條件的允許連接,不需要密碼或其他認證
- reject,無條件的拒絕連接
- md5,要求客戶端提供一個MD5加密的口令進行認證
- password,要求客戶端提供一個未加密的口令進行認證
- gss,用GSSAPI認證用戶
- sspi,用SSPI認證用戶
- krb5,用Kerberos V5認證用戶
- ident,允許客戶端上的特定操作系統用戶連接到數據庫
- ldap,用LDAP服務器認證
- radius,用RADIUS服務器認證
- cert,用SSL客戶端證書認證
- pam,用操作系統提供的可插入認證模塊服務(PAM)來認證
2.6 第六個字段,認證選項
一行記錄的第六個字段,[auth-options] 表示認證選項,也可以不指定。
注:
修改pg_hba.conf配置文件後,需要重新加載生效。
service postgresql reload
或者
pg_ctl reload -D data_dir
或者
select pg_reload_conf();