PostgreSQL 教程

查询

连接

高级部分

程序连接接口

PostgreSQL 配置

PostgreSQL 笔记

PostgreSQL 远程访问策略等配置设置


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]

连接方式

第一列指定连接方式,它有 localhosthostsslhostnossl 四个设定值。

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