PostgreSQL 针对本地、内网及外网的访问制定了一个单独的配置文件 pg_hba.conf
,它学名是客户端认证(Client Authentication)配置文件,默认在 /var/lib/pgsql/9.6/data/
目录下。
配置格式
所有的配置记录都遵循如下一种格式:
local database user auth-method [auth-option]
host database user CIDR-address auth-method [auth-option]
hostssl database user CIDR-address auth-method [auth-option]
hostnossl database user CIDR-address auth-method [auth-option]
host database user IP-address IP-mask auth-method [auth-option]
hostssl database user IP-address IP-mask auth-method [auth-option]
hostnossl database user IP-address IP-mask auth-method [auth-option]
连接方式
第一列指定连接方式,它有 local
、host
、hostssl
和 hostnossl
四个设定值。
local
- 允许使用 unix 域的套接字进行的连接。
host
- 允许通过 TCP/IP 网络进行连接,它即支持 ssl 方式,也支持非ssl方式。
hostssl
- 允许通过 TCP/IP 网络进行连接,并以 ssl 方式,此外,要使用该选项,服务器编译时必须使用
-with-openssl
选项,并且在服务器启动时 ssl 设置是打开的。 hostnossl
- 允许通过 TCP/IP 网络进行连接,非 ssl 方式。
数据库(database)
第二列指定可访问的数据库,具体设置选项如下:
all
:匹配所有的数据库。- 也可以指定多个数据库名,用逗号分隔它们。
- 在文件名前面放一个@,可以指定一个含有数据库名的单独的文件。
用户名(user)
第三列指定可访问的用户名,具体设置选项如下:
all
:匹配所有的用户名。- 也可以指定多个用户名,用逗号分隔它们。
- 在文件名前面放一个@,可以指定一个含有用户名的单独的文件。
认证方法(auth-method)
认证方法有如下:
trust
- 无条件地允许连接,这个方法允许任何可以与 PostgreSQL 数据库连接的用户,以他们期望的任意 PostgreSQL 数据库用户身份进行连接,而且也不需要密码。
reject
- 无条件地拒绝连接,这个方法常用于过滤一些主机。
md5
- 要求客户端提供一个 MD5 加密的口令进行认证,加密认证推荐这种方式。
crypt
- 要求客户端提供一个 crypt() 加密的口令进行认证,其中 md5 方式是它的一种。
password
- 明文形式传递密码,不推荐在不安全的网络上这么设置。
krb5
- 使用 Kerberos V5 网络授权协议进行用户认证,这种只在 TCP/IP 网络连接时可用。
ident
- 从一个 ident 服务器获得客户端的操作系统用户名并且用它作为被允许的数据库用户名来认证,只能用在 TCP/IP 的类型中(即 host,hostssl,hostnossl)。
ldap
- 利用 ldap 认证方式。
pam
- 利用操作系统提供的可插拔认证模块(pam - Pluggable Authentication Modules)。
CIDR 形式地址(CIDR-address)
CIDR 是一种用二进制表示法来代替十进制表示法的新方法。指定匹配的客户端机器的 IP 地址范围。
典型的 CIDR 地址例子如 172.20.143.89/32
。
ip 地址、子网掩码(IP-address、IP-mask)
这两个字段包含可以看成是标准点分十进制表示的 IP 地址/掩码值的一个替代。
例如,使用 255.255.255.0
代表一个 24 位的子网掩码。它们俩放在一起,声明了这条记录匹配的客户机的 IP 地址或者一个IP地址范围。本选项只能在连接方式是 host,hostssl 或者 hostnossl 的时候指定。
例子
pg_hba.conf
文件全实例,具体如下:
# Allow any user on the local system to connect to any database under
# any database user name using Unix-domain sockets (the default for local
# connections).
#
# TYPE DATABASE USER CIDR-ADDRESS METHOD
local all all trust
# The same using local loopback TCP/IP connections.
#
# TYPE DATABASE USER CIDR-ADDRESS METHOD
host all all 127.0.0.1/32 trust
# The same as the last line but using a separate netmask column
#
# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD
host all all 127.0.0.1 255.255.255.255 trust
# Allow any user from any host with IP address 192.168.93.x to connect
# to database "postgres" as the same user name that ident reports for
# the connection (typically the Unix user name).
#
# TYPE DATABASE USER CIDR-ADDRESS METHOD
host postgres all 192.168.93.0/24 ident sameuser
# Allow a user from host 192.168.12.10 to connect to database
# "postgres" if the user's password is correctly supplied.
#
# TYPE DATABASE USER CIDR-ADDRESS METHOD
host postgres all 192.168.12.10/32 md5
# In the absence of preceding "host" lines, these two lines will
# reject all connection from 192.168.54.1 (since that entry will be
# matched first), but allow Kerberos 5 connections from anywhere else
# on the Internet. The zero mask means that no bits of the host IP
# address are considered so it matches any host.
#
# TYPE DATABASE USER CIDR-ADDRESS METHOD
host all all 192.168.54.1/32 reject
host all all 0.0.0.0/0 krb5
# Allow users from 192.168.x.x hosts to connect to any database, if
# they pass the ident check. If, for example, ident says the user is
# "bryanh" and he requests to connect as PostgreSQL user "guest1", the
# connection is allowed if there is an entry in pg_ident.conf for map
# "omicron" that says "bryanh" is allowed to connect as "guest1".
#
# TYPE DATABASE USER CIDR-ADDRESS METHOD
host all all 192.168.0.0/16 ident omicron
# If these are the only three lines for local connections, they will
# allow local users to connect only to their own databases (databases
# with the same name as their database user name) except for administrators
# and members of role "support", who may connect to all databases. The file
# $PGDATA/admins contains a list of names of administrators. Passwords
# are required in all cases.
#
# TYPE DATABASE USER CIDR-ADDRESS METHOD
local sameuser all md5
local all @admins md5
local all +support md5
# The last two lines above can be combined into a single line:
local all @admins,+support md5
# The database column can also use lists and file names:
local db1,db2,@demodbs all md5