热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

连接数据库失败提示hba.conf不符合的处理方法

瀚高数据库目录环境文档用途详细信息环境系统平台:NA版本:6.0,5.6.5,5.6.4,5.6.3,5.6.1,4.5.2,4.5,4.3.4.9,

瀚高数据库
目录
环境
文档用途
详细信息

环境
系统平台:N/A
版本:6.0,5.6.5,5.6.4,5.6.3,5.6.1,4.5.2,4.5,4.3.4.9,4.3.4.8,4.3.4.7,4.3.4.6,4.3.4.5,4.3.4.4,4.3.4.3,4.3.4.2,4.3.4,4.7.8,4.7.7,4.7.6,4.7.5,4.3.2,4.1.1
文档用途
本文主要介绍如何对 hba.conf 进行合理的配置,以防止因hba.conf文件配置不合理从而连接不上数据库。

详细信息

1. 客户端认证文件介绍

客户端认证是由一个配置文件(通常名为 pg_hba.conf 并被存放在数据库集簇目录中,HBA 表示基于主机的认证)控制。在 initdb 初始化数据目录时,会在 $PGDATA 下生成 pg_hba.conf 文件。我们也可以把认证配置文件放在其它地方。

pg_hba.conf 文件的常用格式是一组记录,每行一条。空白行将被忽略, “#” 注释字符后面的任何文本也被忽略。记录不能跨行。一条记录由若干用空格 或制表符分隔的域组成。如果域值用双引号包围,那么它可以包含空。在数据库、用户或地址域中引用一个关键字(例如 all 或 replication)将使该词失去其特殊含义,将会只匹配一个有该名字的数据库、用户或主机。每条记录指定一种连接类型、一个客户端 IP 地址范围(如果和连接类型相关)、一个数据库名、一个用户名以及对匹配这些参数的连接所使用的认证方法。第一条匹配连接类型、客户端地址、连接请求的数据库和用户名的记录将被用于执行认证。这个过程没有“落空”或者“后备”的说法:如果选择了一条记录而且认证失败,那么将不再考虑后面的记录。如果没有匹配的记录,那么访问将被拒绝。

无论客户端以何种方式来登录数据库,都要有一个客户端可以访问的数据库用户或叫角色存在。如果是本地认证,则服务器会验证发起请求的客户端的系统用户名,系统用户名可能与数据库角色相同,也可能不同。

注意事项:

  1. “#” 号注释会忽略后面的文本。

  2. pg_hba.conf中的连接配置记录不能跨行。

  3. 一个客户端请求只会匹配pg_hba.conf中与连接类型,数据库,数据库用户和地址等信息匹配的第一行,无论登录成功或者失败都不会再去匹配其他行。

  4. pg_hba.conf读取顺序是从上往下,来读取第一个符合条件的记录。


2. pg_hba.conf配置说明

2.1 pg_hba.conf 配置格式

pg_hba.conf文件路径

1)允许本地系统上的任何用户通过 Unix 域套接字以任意数据库用户名连接到任意数据库(本地连接的默认值)。

[root@hgv4 data]# ls -l $PGDATA/pg_hba.conf-rw------- 1 root root 4298 1021 11:39 /opt/HighGo4.5.2-see/data/pg_hba.conf

2)任意数据库用户名连接到任意数据库,使用本地环回 TCP/IP 连接。

pg_hba.conf文件 7 种配置

#request_mode db_name db_role address mask method options 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]

2.2 pg_hba.conf各列释义:

第一列(request_mode)

local:匹配使用 Unix 域套接字(unix domain socket)的连接。 如果没有这种类型的记录,则不允许 Unix 域套接字连接。

host:匹配使用 TCP/IP 建立的连接。 host记录匹配SSL和非SSL的连接尝试, 此外还有GSSAPI 加密的或non-GSSAPI 加密的连接尝试。

hostssl:匹配使用 TCP/IP 建立的连接,但必须是使用SSL加密的连接。要使用这个选项,编译服务器的时候必须打开SSL支持。此外,在服务器启动的时候通过将postgresql.conf中的ssl 设置为on,打开的SSL支持。否则,hostssl记录会被忽略,并且会记录一个警告说它无法匹配任何连接。

hostnossl:这条记录的行为与hostssl相反;它只匹配那些在 TCP/IP上不使用SSL的连接。

host/hostssl/hostnossl总结: 认证方法通过TCP/IP连接,带有ssl后缀的认证方式使用SSL连接,带有nossl后缀的认证方式不使用SSL连接。

第二列(db_name)

database:指定要访问的数据库sameuser表示如果请求的数据库名与角色名相同则匹配。replication表示允许replication连接请求,此时不指定任何特定的数据库。可以用逗号分隔来指定多个数据库,值 all 匹配所有的数据库。

第三列(db_role)

user:指定访问数据库使用的数据库角色名,值 all 匹配所有存在的数据库角色。

第四列(address)

IP-address:声明这条记录匹配的客户端机器的地址。可以是主机名或者ip地址。ip地址可以以常用的两种方式指定。0.0.0.0/0代表全部IPv4地址,::/0代表全部IPv6地址。

第五列(mask)

IP-mask:这两个域可以被用作IP-address / mask-length记号法的替代方案。和指定掩码长度不同,实际的掩码被指定在一个单独的列中。例如,255.0.0.0表示 IPv4 CIDR 掩码长度 8,而255.255.255.255表示 CIDR 掩码长度 32。这些域只适用于host、hostssl和hostnossl记录。

第六列(method:auth-method)

trust:无条件的允许连接。这个方法允许任何人用任意一个用户登录到数据库。

md5:要求客户端提供一个MD5加密的口令进行认证。

password:要求客户提供一个未加密的密码进行身份验证,不安全。

ident:使用ident服务器认证用户。

ldap:用LDAP服务器进行认证

sm3:执行 sm3 认证来验证用户的口令。sm3 算法是国家密码算法的一种散列算法,在用户认证过程中,和 md5 的过程一致,但是算法的安全度比 md5 安全的多,并且 sm3 算法自主可控,当然,sm3 也是以散列值的形式存在于数据库的用户表

pam:使用PAM认证。

reject:无条件地拒绝连接。这有助于从一个组中“过滤出”特定主机,例如一个reject行可以阻塞一个特定的主机连接,而后面一行允许一个特定网络中的其余主机进行连接。

第七列(options)

auth-options :以name=value的形式为这些认证方法指定一些选项。比较常用的是指定用户名映射,格式为map=map-name,map-name指定pg_ident.conf文件中的一条命名用户名映射记录。此列一般极少配置。

2.3 pg_hba.conf 配置示例

说明:pg_hba.conf配置格式,我们可以简化为以下两种方式:

远程客户端访问记录的格式:

host database role address auth-method

本地UNIX-域套接字记录的格式:

local database role auth-method

1)允许本地系统上的任何用户通过 Unix 域套接字以任意数据库用户名连接到任意数据库(本地连接的默认值)。

# TYPE DATABASE USER ADDRESS METHODlocal all all trust

2)任意数据库用户名连接到任意数据库,使用本地环回 TCP/IP 连接。

# TYPE DATABASE USER ADDRESS METHODhost all all 127.0.0.1/32 trust

3)任意数据库用户名连接到任意数据库,使用独立的掩码列

# TYPE DATABASE USER IP-ADDRESS IP-MASK METHODhost all all 127.0.0.1 255.255.255.255 trust

4) 任意数据库用户名连接到任意数据库,IPv6 上相同的规则

# TYPE DATABASE USER ADDRESS METHODhost all all ::1/128 trust

5)任意数据库用户名连接到任意数据库,使用主机名的相同规则(通常同时覆盖 IPv4 和 IPv6)。

# TYPE DATABASE USER ADDRESS METHODhost all all localhost trust

6)允许来自任意具有 IP 地址192.168.93.x 的主机上任意用户以 ident 为该连接所报告的相同用户名连接到数据库 “highgo”。

# TYPE DATABASE USER ADDRESS METHODhost highgo all 192.168.93.0/24 ident

7)如果用户的口令被正确提供,允许来自主机 192.168.12.10 的任意用户连接到数据库 “highgo”

# TYPE DATABASE USER ADDRESS METHODhost highgo all 192.168.12.10/32 md5

8)如果没有前面的 “host” 行,这两行表示将拒绝所有来自 192.168.54.1的连接(因为那些项将首先被匹配),允许来自网络中其他任何地方的 md5 口令方式的认证连接,零掩码匹配任意主机。

# TYPE DATABASE USER ADDRESS METHODhost all all 192.168.54.1/32 rejecthost all all 0.0.0.0/0 md5

9)无条件的允许来自网络中其他任何地方的 md5 口令方式的认证连接。

# TYPE DATABASE USER ADDRESS METHODhost all all 0.0.0.0/0 md5

2.4 配置注意事项:

1)数据库名与用户名注意大小写。

2)address(用户的IP范围)的值的格式是:IP/数值

数值取值范围为:0,8,16,24,32 即表示掩码bit的个数。例:32 -> 192.168.1.1/32 表示必须是来自这个IP地址的访问才合法。24 -> 192.168.1.0/24 表示只要来自192.168.1.0 ~ 192.168.1.255的都合法。16 -> 192.168.0.0/16 表示只要来自192.168.0.0 ~ 192.168.255.255的都合法。8 -> 192.0.0.0/16 表示只要来自192.0.0.0 ~ 192.255.255.255的都合法。0 -> 0.0.0.0/0 表示全部IP地址都合法,/左边的IP地址随便了只要是合法的IP地址即可。

3)完成上面两个配置文件的修改以后,为了让配置生效,需要重新启动或 reload 数据库服务。

4)要考虑下是否要支持ssl 协议,在需要的时候添加添加ssl 选项。

3. 常见问题处理方法

3.1 无法连接到服务器:不支持 13 认证方式

psql -U syssso -d highgo -p 5866 -h 192.168.0.131

psql: 错误: 无法连接到服务器:不支持 13 认证方式.

处理方法:

1)如果数据库默认使用 sm3 (highgodb安全版中的认证方式) 身份验证算法,需要改为 md5,步骤如下:2)修改 postgresql.conf 文件 password_encryption 参数由 sm3 修改为 md53)重启数据库 pg_ctl restart4)sysdba 登陆,修改密码为 1qaz!QAZ;syssao、syssso 及其他用户同理。5)修改 pg_hba 文件加密方式改为 md56)重启数据库 pg_ctl restart7)登录数据库,输入密码 1qaz!QAZ 进行验证。说明:密码可根据自己的环境进行修改。

3.2 FATAL: no pg_hba.conf entry for host “123.123.123.123”, user “andym”, database “testdb”

处理方法:

表示已和服务器进行通信,但服务器拒绝了连接请求,没有在其 pg_hba.conf 配置文件里找到匹配项,需要在pg——hba.conf中添加匹配选项。

3.3 FATAL: password authentication failed for user “andym”

处理方法:

这样的消息表示已和服务器进行通信,但是必须通过pg_hba.conf文件中指定的认证方法。检查你提供的口令,认证类型。
3.4 FATAL: user “andym” does not exist

处理方法:

指示的数据库用户没有被找到,需检查数据库名称是否正确。
3.5 FATAL: database “testdb” does not exist

处理方法:

你试图连接的数据库不存在。请注意如果你没有声明数据库名。


推荐阅读
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • mysql-cluster集群sql节点高可用keepalived的故障处理过程
    本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ... [详细]
  • 微信商户扫码支付 java开发 [从零开发]
    这个教程可以用作了解扫码支付的整体运行过程,已经实现了前端扫码,记录订单,回调等一套完整的微信扫码支付。相关链接:微信支 ... [详细]
  • 起因由于我录制过一个小程序的课程,里面有消息模板的讲解。最近有几位同学反馈官方要取消消息模板,使用订阅消息。为了方便大家容易学 PythonFlask构建微信小程序订餐系统 课程。 ... [详细]
author-avatar
雨雾1989_153
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有