连接数据库失败提示hba.conf不符合的处理方法
瀚高数据库
目录
环境
文档用途
详细信息
环境
系统平台: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 地址范围(如果和连接类型相关)、一个数据库名、一个用户名以及对匹配这些参数的连接所使用的认证方法。第一条匹配连接类型、客户端地址、连接请求的数据库和用户名的记录将被用于执行认证。这个过程没有“落空”或者“后备”的说法:如果选择了一条记录而且认证失败,那么将不再考虑后面的记录。如果没有匹配的记录,那么访问将被拒绝。
无论客户端以何种方式来登录数据库,都要有一个客户端可以访问的数据库用户或叫角色存在。如果是本地认证,则服务器会验证发起请求的客户端的系统用户名,系统用户名可能与数据库角色相同,也可能不同。
注意事项:
“#” 号注释会忽略后面的文本。
pg_hba.conf中的连接配置记录不能跨行。
一个客户端请求只会匹配pg_hba.conf中与连接类型,数据库,数据库用户和地址等信息匹配的第一行,无论登录成功或者失败都不会再去匹配其他行。
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 10月 21 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
处理方法:
你试图连接的数据库不存在。请注意如果你没有声明数据库名。
连接数据库失败提示hba.conf不符合的处理方法相关推荐
- sql server 2008建域时提示admin密码不符合要求解决方法
安装好 Windows server 2008企业版之后,设置Administrator的密码也顺利通过,但在建Active Directory时,却总提示Administrator账号密码不符合要求 ...
- cad无法启动计算机丢失,Win7系统开启Cad软件失败提示丢失ac1st16.dll怎么解决
Win7系统开启Cad软件失败提示丢失ac1st16.dll怎么解决?此问题困扰着许多用户,Cad作为一款热门的设计辅助工具,想必使用的用户不再少数.有用户在Win7系统下开启Cad软件的时候,出现了 ...
- 无法启动因为计算机丢失ac,Win7系统启动cad提示丢失ac1st16.dll的解决方法
Win7系统启动cad提示丢失ac1st16.dll的解决方法 在Win7系统启动cad提示丢失ac1st16.dll的解决方法介绍,希望能够对大家有所帮助! 方法/步骤 1.右键单击我的电脑-属性 ...
- 阿里云虚拟主机安装wordpress,提示连接数据库失败的解决方法
阿里云虚拟主机安装wordpress,提示连接数据库失败的解决方法 参考文章: (1)阿里云虚拟主机安装wordpress,提示连接数据库失败的解决方法 (2)https://www.cnblogs. ...
- java中连接数据库失败,提示:Acc?¨s refus?? pour l'utilisateur: 'root'@'@localhost' (mot de passe: OUI)
java中连接数据库失败,提示:Acc?¨s refus?? pour l'utilisateur: 'root'@'@localhost' (mot de passe: OUI) 这是由于连接数据库 ...
- 连接数据库时提示归档器失败 ORA-00257: archiver error
(1)问题现象 SQL> conn hr/hr ERROR: ORA-00257: archiver error. Connectinternal only, until freed. Warn ...
- 织梦Dedecms错误警告:连接数据库失败,可能数据库密码不对
很多站长在使用dedecms的过程中会遇到这样的错误提示"DedeCMS Error Track:DedeCMS错误警告:连接数据库失败,可能数据库密码不对或数据库服务器出错!", ...
- proftpd启动失败提示unable to determine IP address of “xxx.com”
proftpd启动失败提示unable to determine IP address of "xxx.com" 这种proftpd启动失败的原因是无法解析后面主机的IP地址,解决 ...
- Jmeter+ant+Jenkins构建接口自动化测试时构建失败 提示:Fatal Error! 字符引用 #原因...
Jmeter+ant+Jenkins构建接口自动化测试时构建失败 提示:Fatal Error! 字符引用 "&#原因:接口响应数据中有&# 转载于:https://www. ...
最新文章
- JS、JQuery和ExtJs的跨域处理
- iis 重新安装后 重新注册asp.net
- 软件需求说明书 概要设计说明书 项目开发计划 详细设计说明书 模版
- python系统自学_如何系统地自学python
- 使窗口(和 MDI 子窗口)的关闭按钮变灰的方法 - 回复 梦想成真
- 洛谷2149 Elaxia的路线(dp+最短路)
- 20200504:力扣187周赛下
- 黑马程序员---java基础------------------基础中的基础学习
- [51nod1084]矩阵取数问题 V2
- sql server哪个版本比较好用_给视频加音乐的软件哪个比较好用?
- FZU《C语言程序综合设计》
- 脚本文件和函数文件的区别
- 基于特征点检测的人脸融合技术
- 内存单元地址求字节大小的计算方法
- 喝王老吉可延长寿命大约10%?
- 43.Django04
- vue中使用tinymce富文本
- 说说wps jsa的ListBox控件的数组写入方法
- 深入浅出Java clone技术
- PaPerPass V3.0使用教程
热门文章
- 奶块服务器维护多久,奶块为什么要更新维护 | 手游网游页游攻略大全
- dos命令为java程序赋值_在DOS命令行状态下,如果源程序HelloWorld.java在当前目录下,那么编译该程序的命令是() (5.0分)_学小易找答案...
- Charles抓包工具测试实战
- cocosCreator 精灵图片加载(一键还原大小+动态修改图片)
- 先用总分升序再用计算机降序,怎样用升序降序给EXCEL排名
- Wikipedia iOS客户端源码
- Graphql入门_1
- Flatten()详解
- 8-2 实现Time类中的运算符重载
- c罗python可视化分析_关于C罗“冲刺速度”这种隐私问题,我们在Kaggle上找到了数据集,然后。。。...