pg系数据库经典报错,no pg_hba.conf entry for host “x.x.x.x“, user “ ...

打印 上一主题 下一主题

主题 999|帖子 999|积分 2997

        上一篇文档述说了pg的一个经典报错“current transaction is aborted, commands ignored until end of transaction block”【经典报错1】,这次再来述说一个pg系数据的经典报错。
        pg系数据库指的是postgre、greenplum、国产数据中的kingbase、gaussdb等等,使用postgre作为根本的数据库,然后出现的数据库。
1、题目描述: no pg_hba.conf entry for host "x.x.x.x", user "xxx", database "xxx",ssl off

在连接pg系数据的过程中,可能会遇到如下图中的报错

2、解决方案

2.1 缘故起因分析

对于该错误,着实可以翻译下,机翻有时候着实不对,大概可以翻译为:pg_hba.conf中,没有对主机“xxx.xxx.x.xxx”,用户"xxx",访问“xxx”数据库的条目。
明白话的意思就是,这个配置文件,没有对来源ip放开访问数据库的入口。
查看下pg数据库服务器上的pg_hba.conf
如果不知道在那里,可以使用find查找
  1. find / -name "pg_hba.conf"
复制代码
 
通过cat下令查看即可
  1. cat /var/lib/postgresql/data/pg_hba.conf
复制代码

注:我这里设置了 host all all all md5 所以恣意一个地方都可以连接 
2.2 解决方式

在这里呢,先说一下pg_hba.conf设置主机访问规则,查看官方文档可以看到,大约是7中写法,常见的4中写法如下
  1. local      database  user  auth-method  [auth-options]
  2. host       database  user  address  auth-method  [auth-options]
  3. hostssl    database  user  address  auth-method  [auth-options]
  4. hostnossl  database  user  address  auth-method  [auth-options]
复制代码
相干参数阐明: 


  • local:通过unix域套接字进行连接
  • host:通过tcp/ip进行连接,匹配ssl和非ssl的连接请求(最为常用)
  • hostssl:匹配使用tcp/ip的ssl连接。必须是ssl加密的连接
  • hostnossl:匹配使用tcp/ip,不使用ssl的连接
  • database:匹配的数据库,all则是所有的数据库
  • user:匹配的数据库用户,all表现匹配所有的数据库
  • address:匹配的客户端地点,可以是ip地点、范围,比如:

    • 192.168.1.233/32 表现匹配192.168.1.233这个客户端,可以访问。
    • 192.168.1.0/24 表现匹配192.168.1.0 到192.168.1.255这个范围的ip可以访问(0和255一般不使用)
    • 192.168.0.0/16 表现匹配192.168.1.x - 192.168.255.x这个大范围ip可以访问

  • auth-method:表现验证的方法(trust reject md5 password gss sspi ident peer ldap radius cert pam)常用的几种如下:

    • trust:无条件答应连接(不必要口令)
    • md5:使用md5加密
    • ldap:使用LDAP服务器进行认证
    • cert:使用SSL客户端证书进行认证

  1. # 允许在本机上的任何用户使用 Unix 域套接字(本地连接的缺省)
  2. # 以任何数据库用户身份连接任何数据库
  3. #
  4. # TYPE  DATABASE        USER            ADDRESS                 METHOD
  5. local   all             all                                     trust
  6. # 和上面相同,但是使用的是回环的(loopback)TCP/IP 连接
  7. #
  8. # TYPE  DATABASE        USER            ADDRESS                 METHOD
  9. host    all             all             127.0.0.1/32            trust
  10. # 和上面一行相同,但是用的是独立的子网掩码字段
  11. #
  12. # TYPE  DATABASE        USER            IP-ADDRESS      IP-MASK             METHOD
  13. host    all             all             127.0.0.1       255.255.255.255     trust
  14. # 在IPv6上相同。
  15. #
  16. # TYPE  DATABASE        USER            ADDRESS                 METHOD
  17. host    all             all             ::1/128                 trust
  18. # 和上面相同,但是使用一个主机名(通常包括IPv4 和 IPv6)。
  19. #
  20. # TYPE  DATABASE        USER            ADDRESS                 METHOD
  21. host    all             all             localhost               trust
  22. # 允许 IP 地址为 192.168.93.x 的任何主机与 "postgres" 数据库相连,
  23. # 用与他们在自己的主机上相同 ident 的用户名标识他自己(通常是他的操作系统用户名)
  24. #
  25. # TYPE  DATABASE        USER            ADDRESS                 METHOD
  26. host    postgres        all             192.168.93.0/24         ident
  27. # 允许来自主机 192.168.12.10 的用户提供了正确的口令之后与 "postgres" 数据库连接。
  28. #
  29. # TYPE  DATABASE        USER            ADDRESS                 METHOD
  30. host    postgres        all             192.168.12.10/32        md5
  31. # 允许来自在example.com域里的主机的用户在提供了正确的口令之后与任意数据库连接。
  32. #
  33. # TYPE  DATABASE        USER            ADDRESS                 METHOD
  34. host    all             all             .example.com            md5
  35. # 如果前面没有其它 "host" 行,那么下面两行将拒绝所有来自 192.168.54.1 的连接请求(因为前面的记录先匹配)。
  36. # 但是允许来自互联网上其它任何地方的有效的 GSSAPI 认证的连接。
  37. # 零掩码引起不考虑主机 IP 的任何位。因此它匹配任何主机。
  38. #
  39. # TYPE  DATABASE        USER            ADDRESS                 METHOD
  40. host    all             all             192.168.54.1/32         reject
  41. host    all             all             0.0.0.0/0               gss
  42. # 允许来自 192.168.x.x 的任何用户与任意数据库连接,只要他们通过 ident 检查。
  43. # 但如果 ident 说该用户是 "bryanh" 且他要求以 PostgreSQL 用户 "guest1" 连接,
  44. # 那么只有在 pg_ident.conf 里有 "omicron" 的映射说 "bryanh" 允许以 "guest1" 进行连接时才真正可以进行连接。
  45. #
  46. # TYPE  DATABASE        USER            ADDRESS                 METHOD
  47. host    all             all             192.168.0.0/16          ident map=omicron
  48. # 如果下面是用于本地连接的仅有的三行,那么它们将允许本地用户只和同名数据库连接。
  49. # 只有管理员和 "support" 角色里的成员例外,他们可以连接到任何数据库。
  50. # $PGDATA/admins 文件列出了那些允许与所有数据库连接的用户名。
  51. # 在所有情况下都需要口令。
  52. #
  53. # TYPE  DATABASE        USER            ADDRESS                 METHOD
  54. local   sameuser        all                                     md5
  55. local   all             @admins                                 md5
  56. local   all             +support                                md5
  57. # 上面最后两行可以合起来写成一行
  58. local   all             @admins,+support                        md5
  59. # 数据库字段也可以使用列表和文件名:
  60. local   db1,db2,@demodbs  all                                   md5
复制代码
所以可以根据自己的需求,放开所有的ip照旧说通过ip/32,ip/24,/16 这种方式放开部分ip 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我可以不吃啊

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表