PostgreSQL的客户端认证是由一个配置文件pg_hba.conf控制的,该文件默认存放在数据目录下。
pg_hba.conf文件的格式如下:
TYPE DATABASE USER ADDRESS METHOD
local database user auth-method [auth-options]
host database user address auth-method [auth-options]
hostssl database user address auth-method [auth-options]
hostnossl database user address auth-method [auth-options]
host database user IP-address IP-mask auth-method [auth-options]
hostssl database user IP-address IP-mask auth-method [auth-options]
hostnossl database user IP-address IP-mask auth-method [auth-options]
pg_hba.conf文件参数主要分为以下五类:
- 连接类型
- 客户端 IP 地址(范围)
- 数据库名
- 用户名
- 认证方式
1.1 连接方式TYPE
指定用户的连接方式
- local
使用本地unix套接字 - host
使用TCP/IP连接(包括SSL和非SSL),host结合IPv4地址/结合IPv6地址 - hostssl
只能使用SSL TCP/IP连接 - hostnossl
不能使用SSL TCP/IP连接
1.2 数据库名DATABASE
指定用户所匹配的数据库名称
- all表明该记录匹配所有数据库
- sameuser表示如果被请求的数据库和请求的用户同名,则匹配。
- samerole表示请求的用户必须是一个与数据库同名的角色中的成员。
- replication表示如果请求一个复制链接, 则匹配。
- 在其它情况里,这就是一个特定的 PostgreSQL数据库名字。可以通过用逗号分隔的方法声明多个数据库, 也可以通过前缀@来声明一个包含数据库名的文件。
1.3 用户名USER
指定数据库用户
- all表明匹配于所有用户。
- 其他情况就是特定数据库用户名
1.4 IP地址和掩码ADDRESS
指定客户端机器地址,该部分对应的连接方式必须是host、hostssl、hostnossl之一
- all可以匹配任何ip地址、写samehost来匹配任何本服务器自身的 IP 地址或者写samenet来匹配本服务器直接连接到的任意子网的任意地址。
- 指定了一个主机名,该名称会与客户端的 IP 地址的反向名字解析结果进行比较。
- 一个 IP 地址范围以该范围的开始地址的标准数字记号指定,然后是一个斜线(/) 和一个CIDR掩码长度。
1.5 身份验证模式METHOD
METHOD为身份验证模式一般分为:ident、trust、md5、password、peer、reject。其中ident和peer模式仅适用于Linux、Unix和Max,不适用于Windows。
- trust,该模式可以不用密码直接连接数据库,不安全
- md5,该模式要求连接发起者携带用md5算法加密的密码
- password,该模式是使用明文密码进行身份验证,也不安全,不推荐
- ident,该模式下系统会将请求发起者的操作系统用户映射为PostgesSQL数据库内部用户,并以该内部用户的权限登录,且此时无需提供登录密码。操作系统用户与数据库内部用户之间的映射关系会记录在pg_ident.conf文件中。
- peer,该模式使用连接发起端的操作系统名进行身份验证。仅限于Linux、BSD、Mac OS X和Solaris,并且仅可用于本地服务器发起的连接。
- reject,该模式表示拒绝所有请求。
- gss,用 GSSAPI 认证用户
- sspi,用 SSPI 来认证用户
- ldap,使用LDAP服务器认证
- radius,用 RADIUS 服务器认证
- cert,使用 SSL 客户端证书认证
- pam,使用操作系统提供的可插入认证模块服务(PAM)认证
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 0.0.0.0/0 md5
# 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