首页 > 数据库 >openGauss学习笔记-98 openGauss 数据库管理-管理数据库安全-客户端接入认证之配置客户端接入认证

openGauss学习笔记-98 openGauss 数据库管理-管理数据库安全-客户端接入认证之配置客户端接入认证

时间:2023-10-13 19:03:25浏览次数:45  
标签:数据库 hba 认证 pg openGauss 连接 客户端

openGauss学习笔记-98 openGauss 数据库管理-管理数据库安全-客户端接入认证之配置客户端接入认证

98.1 背景信息

如果主机需要远程连接数据库,必须在数据库系统的配置文件中增加此主机的信息,并且进行客户端接入认证。配置文件(默认名称为pg_hba.conf)存放在数据库的数据目录里。hba(host-based authentication)表示是基于主机的认证。

  • 本产品支持如下三种认证方式,这三种方式都需要配置“pg_hba.conf”文件。
    • 基于主机的认证:服务器端根据客户端的IP地址、用户名及要访问的数据库来查看配置文件从而判断用户是否通过认证。
    • 口令认证:包括远程连接的加密口令认证和本地连接的非加密口令认证。
    • SSL加密:使用OpenSSL(开源安全通信库)提供服务器端和客户端安全连接的环境。
  • “pg_hba.conf”文件的格式是一行写一条信息,表示一个认证规则,空白和注释(以#开头)被忽略。
  • 每个认证规则是由若干空格和/,空格和制表符分隔的字段组成。如果字段用引号包围,则它可以包含空白。一条记录不能跨行存在。

98.2 操作步骤

1.以操作系统用户omm登录数据库主节点。

2.配置客户端认证方式,允许客户端以“jack”用户连接到本机,此处远程连接禁止使用“omm”用户(即数据库初始化用户)。

例如,下面示例中配置允许IP地址为10.10.0.30的客户端访问本机。

gs_guc set -N all -I all -h "host all jack 10.10.0.30/32 sha256"

img 说明:

  • 使用“jack”用户前,需先本地连接数据库,并在数据库中使用如下语句建立“jack”用户:
CREATE USER jack PASSWORD 'Test@123';  
  • -N all表示openGauss的所有主机。
  • -I all表示主机的所有实例。
  • -h表示指定需要在“pg_hba.conf”增加的语句。
  • all表示允许客户端连接到任意的数据库。
  • jack表示连接数据库的用户。
  • 10.10.0.30/32表示只允许IP地址为10.10.0.30的主机连接。此处的IP地址不能为openGauss内的IP,在使用过程中,请根据用户的网络进行配置修改。32表示子网掩码为1的位数,即255.255.255.255。
  • sha256表示连接时jack用户的密码使用sha256算法加密。

这条命令在数据库主节点实例对应的“pg_hba.conf”文件中添加了一条规则,用于对连接数据库主节点的客户端进行鉴定。

“pg_hba.conf”文件中的每条记录可以是下面四种格式之一,四种格式的参数说明请参见配置文件参考

local     DATABASE USER METHOD [OPTIONS]
host      DATABASE USER ADDRESS METHOD [OPTIONS]
hostssl   DATABASE USER ADDRESS METHOD [OPTIONS]
hostnossl DATABASE USER ADDRESS METHOD [OPTIONS]

因为认证时系统是为每个连接请求顺序检查“pg_hba.conf”里的记录的,所以这些记录的顺序是非常关键的。

img 说明:

  • 在配置“pg_hba.conf”文件时,请依据通讯需求按照格式内容从上至下配置记录,优先级高的需求需要配置在前面。openGauss和扩容配置的IP优先级最高,用户手动配置的IP请放在这二者之后,如果已经进行的客户配置和扩容节点的IP在同一网段,请在扩容前删除,扩容成功后再进行配置。

因此对于认证规则的配置建议如下: 靠前的记录有比较严格的连接参数和比较弱的认证方法。靠后的记录有比较宽松的连接参数和比较强的认证方法。

img 说明:

  • 一个用户要想成功连接到特定的数据库,不仅需要通过pg_hba.conf中的规则检查,还必须要有该数据库上的CONNECT权限。如果希望控制某些用户只能连接到指定数据库,赋予/撤销CONNECT权限通常比在pg_hba.conf中设置规则更为简单。
  • 对应openGauss外部客户端连接,trust为不安全的认证方式,请将认证方式设置为sha256。

98.3 异常处理

用户认证失败有很多原因,通过服务器返回给客户端的提示信息,可以看到用户认证失败的原因。常见的错误提示请参见表1

表 1 错误提示

问题现象 解决方法
用户名或密码错误:FATAL: invalid username/password,login denied 这条信息说明用户名或者密码错误,请检查输入是否有误。
连接的数据库不存在:FATAL: database "TESTDB" does not exist 这条信息说明尝试连接的数据库不存在,请检查连接的数据库名输入是否有误。
未找到客户端匹配记录:FATAL: no pg_hba.conf entry for host "10.10.0.60", user "ANDYM", database "TESTDB" 这条信息说明已经连接了服务器,但服务器拒绝了连接请求,因为没有在它的pg_hba.conf配置文件里找到匹配的记录。请联系数据库管理员在pg_hba.conf配置文件加入用户的信息。
未找到客户端匹配记录:failed to connect 10.10.0.1:12000. 这条信息说明无法连接到指定IP和端口的服务器,请联系数据库管理员检查pg_hba.conf配置文件里是否有配置对应IP白名单。
连接时的用户名不可以包含@字符@ can't be allowed in username 这条报错说明客户端在连接数据库时使用了包含@的用户名,这是不允许的。

98.4 示例

TYPE  DATABASE        USER            ADDRESS                 METHOD

"local" is for Unix domain socket connections only
#表示只允许以安装时-U参数指定的用户从服务器本机进行连接。
local   all             all                                     trust
IPv4 local connections:
#表示允许jack用户从10.10.0.50主机上连接到任意数据库,使用sha256算法对密码进行加密。
host    all           jack             10.10.0.50/32            sha256
#表示允许任何用户从10.10.0.0/24网段的主机上连接到任意数据库,使用sha256算法对密码进行加密,并且经过SSL加密传输。
hostssl    all             all             10.10.0.0/24            sha256
#表示禁止任何用户从10.10.0.1/32网段的主机上连接到任意数据库。 
host    all             all             10.10.0.1/32            reject

标签:数据库,hba,认证,pg,openGauss,连接,客户端
From: https://blog.51cto.com/shuchaoyang/7850451

相关文章

  • AP5125 DC-DC降压恒流IC SOT23-6 过认证 9-100V 6A电源驱动线路图
    1,产品描述 AP5125是一款外围电路简单的Buck型平均电流检测模式的LED恒流驱动器,适用于8-100V电压范围的非隔离式大功率恒流LED驱动领域。芯片采用固定频率140kHz的PWM工作模式,利用平均电流检测模式,因此具有优异的负载调整率特性,高精度的输出电流特性。AP51......
  • 基于ZXing.NET实现的二维码生成和识别客户端
    一、前言ZXing.Net的一个可移植软件包,是一个开源的、多格式的1D/2D条形码图像处理库,最初是用Java实现的。已经过大量优化和改进,它已经被手动移植。它与.Net2.0、.Net3.5、.Net4.x、.Net5.x、.Net6.x、.Net7.x、WindowsRT类库和组件、UWP、.NetStandard1.x和2.0x、.NetC......
  • 【Dotnet 工具箱】推荐一个使用Flutter编写的博客园客户端
    推荐一个使用Flutter编写的博客园客户端简单易用并且同时支持Android/Ios平台。功能包含博客园首页、新闻列表、博问列表、闪存、我的博客、知识库等。截图预览博客园首页新闻列表博问列表闪存列表我的我的资料我的博客知识库博客内容粉丝关注在启动项......
  • PHP 的 Websocket 客户端和服务器
     /*------------------------------------------------------*///--需要安装websocket,我用的是下面链接提供的//--https://github.com/Textalk/websocket-php/*------------------------------------------------------*///客户端require('vendor/autoload.php');$c......
  • 4款.NET开源的Redis客户端驱动库
    前言今天给大家推荐4款.NET开源免费的Redis客户端驱动库(以下排名不分先后)。Redis是什么?Redis全称是REmoteDIctionaryService,即远程字典服务。Redis是一个使用C语言编写的、开源的(遵守BSD协议)、支持网络、可基于内存亦可持久化的日志型、Key-Value的NoSQL数据库。NewLife.......
  • 云华 统一认证 对接
      /***登录*$_GET['ticket']CAS登录方式*$_GET['token']客户端传递参数直接登录*ParamsService::get('ldaphost')LDAP登录*ParamsService::get('radiusopen')RADIUS登录*/functionlogin()......
  • 使用Java客户端将数据加载到Grakn知识图中
    本教程说明了如何使用Grakn的JavaClient将CSV,JSON或XML格式的数据集迁移到Grakn知识图中。我们将在本文中讨论的phone_calls.知识图称为此知识图的模式在此处的前一篇文章中定义。如果您已经熟悉Grakn,并且您需要的只是一个迁移示例,您会发现这个Github存储库很有用。如果,另一方面,你......
  • 【FTP】FlashFXP 530 Non-anonymous ... 连接失败(连接已被客户端关闭)
    参考的这个图: ......
  • libevent简单服务端和客户端实现
    1.生成动态库说明在开始使用之前,我们需要先搞清楚libevent编译生成的各个动态库的作用。在下载libevent源码包进行编译以后,当前目录生成.libs目录,该目录下是所有的目标文件,这里我们只说明个动态库so文件的作用,通过makefile我们可以知道各个动态库包含内容:下面使用libevent实......
  • 封装利用libwebsockets写出的客户端、服务端程序为客户端服务端类
    1.封装我们后续将使用c++来开发程序,因此有必要将用c写成的wss客户端、服务端程序作进一步封装,使其成为wss客户端类和服务端类,这样更便于调用。封装后的程序结构: ubuntu@ubuntu-virtual-machine:~/work/test_libwebsockets/lws_class$tree .├──client│  ├──cl......