概述
在磐维数据库中,允许哪些IP访问数据库服务器是由pg_hba.conf文件来控制的,该文件名翻译过来叫“基于主机的认证”(hba:host-based authentication),本文将围绕该文件的功能、配置进行介绍。
pg_hba.conf文件
在初始化一个数据目录后,会在数据目录生成一个默认的pg_hba.conf文件,该文件以#开头的属于注释行,无需关注其影响。pg_hba.conf每一行配置一条认证规则,该规则由5个字段组成:
连接类型 数据库名 用户名 ip地址(范围) 认证方法
- 连接类型:
- local:表示允许数据库安装用户在服务器本地通过Unix域套接字(不加-h参数)进行连接

- host:可以通过TCP/IP进行连接,包括ssl和非ssl连接(常用)
- hostssl:可以通过TCP/IP进行连接,仅包括ssl连接(不常用)
- hostnossl:可以通过TCP/IP进行连接,仅包括非ssl连接(不常用)
- 数据库名:
- database_name:表示允许连接到指定的单个database
- all:表示允许连接到所有database,对任意连接的database都不拦截
- replication:表示允许流复制连接。注意:replication不被上面的all包括,这里仅作为远程流复制必须的设置项
- 用户名
- username:表示允许此user连接到数据库
- all:表示所有user都可以连接到数据库,对任意发起连接的user都不拦截
- ip地址(范围)
- 完全匹配ip:如192.168.1.10/32,当掩码位数为32时,只放行ip为192.168.1.10的客户端发起的连接
- 范围匹配ip:当掩码位数小于32时,如192.168.1.0/24,放行同网段的所有ip:192.168.1.1、192.168.1.11、192.168.1.200等
- 认证方法
- trust:免密连接
- reject:拒绝连接(黑名单)
- md5:客户端提供一个md5加密的密码口令进行认证
- password:客户端提供一个不加密的明文密码口令进行认证,由于安全风险,谨慎使用!
- sha256:客户端提供一个sh256加密的密码口令进行认证,相比于md5,sha256加密后的密码更复杂、更安全
- ident:服务器会通过ident服务器检查客户端操作系统用户身份,并和数据库同名用户进行匹配,成功匹配后可以免密登录(postgresql数据库可以免密,但是磐维数据库基于安全考虑仍然需要输入密码)
- peer:允许客户端特定的操作系统用户免密连接到数据库同名用户(postgresql数据库可以免密,但是磐维数据库基于安全考虑仍然需要输入密码)
trust认证
因为trust认证无需密码,所以可能会导致普通的操作系统用户连接到数据库从而引起安全问题,为了防止trust带来风险,trust认证一般会与local的连接方式进行组合使用,并对Unix域套接字的文件权限进行控制,相关参数有:
- unix_socket_permissions:Unix域套接字文件权限,一般为0700
- unix_socket_group:Unix域套接字文件属组,默认为空,即文件属主的默认属组
- unix_socket_directory:Unix域套接字文件路径,可以设定到其他用户没有权限的路径,从而保证其他用户无法通过免密连接


当trust与host认证组合使用时,通过TCP/IP的方式导致客户端用户都可以实现免密,从而带来风险,所以在磐维数据库中无法通过trust来实现远程连接免密(即使配置了也不生效):


既然trust认证无法配置远程连接免密,那能否配置服务器本地的其他操作系统用户免密登录呢?不能!

peer认证
peer认证允许客户端的特定操作系统用户连接到数据库同名用户:



md5、sha256认证
该方式一般用作远程认证使用,常常配合host连接方式,需要输入密码,该密码会通过md5/sha256加密传输到服务端,并与数据库存储的用户密码进行对比,如果匹配说明密码正确。
在数据库中,所有的用户密码都被加密存储,有三种加密模式:md5、sha256、md5和sha256混合加密,具体的加密方式通过参数password_encryption_type控制,测试验证不同加密模式下用户u1的加密密码存储情况:
| 取值 | 说明 | 测试 |
|---|---|---|
| 0 | md5加密 | ![]() |
| 1 | 混合加密 | ![]() |
| 2 | sha256加密 | ![]() |
- 当数据库的用户密码是混合加密时,认证方式可以是md5 or sha256
- 当数据库的用户密码是sha256加密时,认证方式只能是sha256,如果是md5会报错密码错误!
- 当数据库的用户密码是md5加密时,认证方式可以是md5 or sha256



总结
磐维数据库除了数据库初始用户可以通过本地免密方式连接到数据库,其他用户(无论是本地还是远程)无法实现免密登录。业务通过远程连接时需要配置pg_hba.conf文件,其中连接方式一般使用host,认证方式使用sha256,因为sha256无论是安全性还是通用性都强于md5。







