身份验证是数据库服务器建立客户端身份的过程,确定是否允许客户端应用程序(或运行客户端应用程序的用户)与所请求的数据库用户名连接。
可以基于(客户端)主机地址,数据库和用户来选择用于认证特定客户端连接的方法。
客户端身份验证由pg_hba.conf配置文件控制,存储在数据库的数据目录中。
pg_hba.conf文档中的记录格式如下:
连接类型 数据库名称 用户名 客户端IP地址范围 身份验证方法
每条记录指定一种连接类型、一个客户端 IP 地址范围(如果和连接类型相关)、一个数据库名、一个用户名以及对匹配这些参数的连接使用的认证方法。第一条匹配连接类型、客户端地址、连接请求的数据库和用户名的记录将被用于执行认证。如果选择了一条记录而且认证失败,那么将不再考虑后面的记录。如果没有匹配的记录,那么访问将被拒绝。
连接类型:
- local : 匹配使用Unix域套接字的连接尝试。
- host : 匹配使用TCP/IP进行的连接尝试,host记录匹配SSL或非SSL连接尝试。
- hostssl : 匹配使用TCP/IP进行的连接尝试,仅限使用SSL加密进行连接时。
- hostnossl : 仅匹配通过TCP/IP进行的不使用SSL的连接尝试
- database : 记录匹配的数据库名称。all指定匹配所有数据库。可以通过用逗号分隔来提供多个数据库名称。
- user : 匹配的数据库用户名。用逗号分隔来提供多个用户名.
- address : 匹配的客户端计算机地址。可包括主机名或IP地址范围。 0.0.0.0/0表示所有IPv4地址,::0/0表示所有IPv6地址。
METHOD :记录匹配时要使用的身份验证方法。
- trust : 允许无条件连接。允许所有连接,无需密码和其他身份验证。
- reject : 无条件拒绝连接。
- scram-sha-256 : 执行SCRAM-SHA-256身份验证以验证用户的密码。
- MD5 : 执行SCRAM-SHA-256或MD5身份验证以验证用户的密码。
- password : 要求客户端提供未加密的密码以进行身份验证。网络明文传送,不安全。
- gss : 使用GSSAPI对用户进行身份验证。这仅适用于TCP/IP连接.
- ident : 与客户端的ident服务器获取客户端主机的用户名。并检查它是否与请求的数据库用户名匹配。Ident身份验证只能用于TCP/IP连接。
- peer : 从操作系统获取主机名,仅适用于本地连接
- cert : 使用SSL客户端证书进行身份验证。
- pam : 使用操作系统提供的可插入身份验证模块(PAM)服务进行身份验证。
举例说明:
- 在pg_hba.conf文件中添加如下规则,则只允许来自IP地址为10.20.16.214的应用连接本系统的所有数据库和用户,并且不需要密码:
host all all 10.20.16.214 32 trust
如果是其它IP来连接,就会认证失败,报错如下:
- 配置如下,则允许来自10.21.10.145的应用连接到‘abc’用户:
host all abc 10.21.10.145 32 trust
连接成功:
- 配置如下,则对于来自10.21.10.145的应用连接到postgres库abc用户,全部拒绝。
host postgres abc 10.21.10.145 32 reject
- 连接报错如下:
- md5认证
- 在pg_hba文件中,配置md5认证如下,method配置md5
host all all 10.20.16.0/24 md5
查询密码加密算法,由password_encryption参数的值指定。当在CREATE ROLE或者ALTER ROLE中指定了口令时,这个参数决定用于加密该口令的算法。默认值是md5,它会将口令存为一个MD5哈希(on也会被接受,它是md5的别名)。将这个参数设置为scram-sha-256将使用SCRAM-SHA-256来加密口令。
postgres=# SELECT name,setting,source,enumvals FROM pg_settings WHERE name = 'password_encryption';
name | setting | source | enumvals
---------------------+---------+---------+---------------------
password_encryption | md5 | default | {md5,scram-sha-256}
(1 row)
- 创建用户,设置密码,查询密码,可以看到密码已经加密成了MD5格式。
- 5、ssl认证
- 编译参数需要加—with-openssl。
修改postgresql.conf,把ssl设置为on,默认是off
ssl = on
查看ssl证书文件:
postgres=# show ssl_cert_file ;
ssl_cert_file
---------------
server.crt
(1 row)
postgres=# show ssl_key_file;
ssl_key_file
--------------
server.key
(1 row)
postgres=# show ssl;
ssl
-----
on
(1 row)
- 将ssl的认证文件复制到数据目录下。
- 修改hba文件
hostssl all all 10.20.16.0/24 md5
重启,使参数生效。
登录
关于AntDB数据库
AntDB数据库始于2008年,在运营商的核心系统上,为全国24个省份的10亿多用户提供在线服务,具备高性能、弹性扩展、高可靠等产品特性,峰值每秒可处理百万笔通信核心交易,保障系统持续稳定运行近十年,并在通信、金融、交通、能源、物联网等行业成功商用落地。




