怎么在PostgreSQL中利用pg_hba.conf实现一个客户端认证功能

  介绍

怎么在PostgreSQL中利用pg_hba.conf实现一个客户端认证功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

在initdb初始化数据文件时,默认提供pg_hba.conf。通过配置该文件,能够指定哪些ip可以访问,哪些ip不可以访问,以及访问的资源和认证方式,该文件类似于甲骨文中的监听中的白名单黑名单功能,且同样可以重载在线生效。

记录可以是下面七种格式之一:

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]

各个域的含义如下:

各个类型简单描述如下:

<代码>本地代码

一般为本地插座连接。如果没有这种类型的记录,就不允许Unix域套接字连接。

<代码>主机

这条记录匹配企图使用TCP/IP建立的连接.host记录匹配SSL和非SSL的连接尝试。

<代码>数据库代码

登录时指定的数据库,所有匹配所有数据库;注意pg是单实例多数据库类型。

<代码>用户代码

登录时指定的数据库用户名,所有的匹配所有用户

<代码>地址

指定这个记录匹配的客户端机器地址。这个域可以包含一个主机名,一个IP地址范围或下文提到的特殊关键字之一。比如网络地址(172.20.143.0/24)以及分别指定IP以及掩码。

<代码>认证方法

客户端采用的认证方式,比如信任为无条件地允许联接;拒绝为无条件拒绝连接;密码为明文密码验证;md5密文密码验证等

如下为几种策略(条目)配置的简单描述:

TYPE  DATABASE  USER  ADDRESS 方法   local  all  all 信任

该认证方式为本地本地套接字方式验证,且无条件接受连接。

 TYPE  DATABASE  USER  ADDRESS 方法
  host  all  all  127.0.0.1/32 信任

该认证方式为允许主机(本地127.0.0.1)进行访问且无条件接受连接。

 TYPE  DATABASE  USER  ADDRESS 方法
  host  postgres  all  192.168.93.0/24  md5 

该认证方式为允许192.168.93网段的客户端所有用户访问postgres数据库

TYPE  DATABASE  USER  IPADDRES  IPMASK 方法   host  dbinst1  user1  192.168.93.21  255.255.255.0  md5

该认证方式为允许192.168.93.21的客户端以user1用户访问dbinst1数据库

通过一番文字描述,最后在来个实际操作,如下案例中可以发现未配置pg_hba.conf策略(条目)则在尝试访问pg时会自动提示无匹配的pg_hba。conf条目。通过配置条目并重新加载后,客户端便可正常访问pg。这个条目类似于防火墙中配置的逐条策略。

怎么在PostgreSQL中利用pg_hba.conf实现一个客户端认证功能

注意虽然pg_bha.conf起到了一部分的客户端访问控制的作用,但是数据库实例层仍然需要做好对应权限控制,比如上文案例中已提前授予user1对dbinst1数据库的连接权限,客户端才可以正常登陆数据库。

总结一下pg_hba.conf就是类似于甲骨文的黑白名单功能的过滤器。

<强>补充:从pg_hba.conf文件谈谈PostgreSQL的连接认证

最近一直在弄PostgreSQL的东西,搭建PostgreSQL数据库集群环境什么的。操作数据库少不得要从远程主机访问数据库环境,例如数据库管理员的远程管理数据库,远程的客户存取数据库文件。

而在PostgreSQL中配置文件pg_hba.conf就是用来设置访问认证的重要文件。这里重点谈谈pg_hba.conf这个文件。

首先声明,本文说明的内容基于PostgreSQL的9.5.4版本,可能和某些低版本的说明有出入,这是PostgreSQL官方自己更新的,如果想看低版本的,可以自己查看下那个对应版本的用户手册。

1. pg_hba.conf文件

怎么在PostgreSQL中利用pg_hba.conf实现一个客户端认证功能