热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Postgresql客户端连接的问题

做程序调用postgresql数据库的时候,后台出现这么一条错误:java.sql.SQLException:Nopg_hba.confentryforhost210.230.203.160,userpostgres,databaserinri01这条错误是什么意思?为什么会出现呢?这条错误的原因是因为客户端远程访问p
   做程序调用postgresql数据库的时候,后台出现这么一条错误:

     java.sql.SQLException: No pg_hba.conf entry for host 210.230.203.160, user postgres, database rinri01

   这条错误是什么意思?为什么会出现呢?
这条错误的原因是因为客户端远程访问postgresql受限所致,因为postgresql默认情况下除本机外的机器是不能连接的,下

面我们就来分析并解决这个问题:

   默认情况下,postgresql本机的连接是信任连接,只要有用户名就可以连接,不用密码. 要改变这种默认设置需要更改

postgresql的两个配置文件(pg_hba.conf与postgresql.conf,这两个文件在initdb时指定的目录下,如:/usr/local/pgsql

/data(unix), windows系统时直接在postgresql的根目录的data目录下)

        文件
pg_hba.conf 的常用格式是一套记录,
        每行一条。空白行行被忽略,井号( # )开头的注释也被忽略。
        一条记录是由若干用空格和/或 tab 分隔的字段组成。
        如果字段用引号包围,那么它可以包含空白。记录不能跨行存在。
        每条记录声明一种联接类型,一个客户端 IP
地址范围(如果和联接类型相关的话),一个数据库名,一个用户名字,
        以及对匹配这些参数的联接使用的认证方法。
第一条匹配联接类型,客户端地址和联接企图请求的数据库名和用户名的记录将用于执行认证。
这个处理过程没有"跨越"或者"回头"的说法:如果选择了一条记录而且认证失败,
        那么将不考虑后面的记录。如果没有匹配的记录,那么访问将被拒绝。
        每条记录可以下面七种格式之一
local    
 database  user  authentication-method  [authentication-option]
host      
database  user  CIDR-address  authentication-method[authentication-option]
hostssl   
database  user  CIDR-address  authentication-method  [authentication-option]
hostnossl  database  user  CIDR-address  authentication-method  [authentication-option]
host      
database  user  IP-address  IP-mask  authentication-method  [authentication-option]
hostssl   
database  user  IP-address  IP-mask  authentication-method  [authentication-option]
hostnossl  database  user  IP-address  IP-mask  authentication-method  [authentication-option]

        各个字段的含义如下:
local
        这条记录匹配通过 Unix 域套接字进行的联接企图。
        没有这种类型的记录,就不允许 Unix 域套接字的联接。
host
        这条记录匹配通过 TCP/IP 进行的联接尝试。
        host 记录匹配 SSL 和非 SSL 的连接请求。
注意:        除非服务器带着合适的
[url=file:///mnt/usbg/lyb/books/postgresql/postgres8.0.zh_cn/runtime-config.html#GUC-LISTEN-ADDRESSES]listen_addresses[/url]
配置参数值启动,否则将不可能进行远程的 TCP/IP 连接,
       因为缺省的行为是只监听本地自环地址 localhost 的连接。
hostssl
        这条记录匹配使用 TCP/IP 的 SSL 联接企图。
        但必须是使用 SSL 加密的联接。
        要使用这个选项,制作服务器的时候必须打开 SSL
支持。而且在服务器启动的时候,
        必须SSL选项通过配置选项
[url=file:///mnt/usbg/lyb/books/postgresql/postgres8.0.zh_cn/runtime-config.html#GUC-SSL]ssl[/url]
打开。
hostnossl
           这个记录与 hostssl
有着正相反的逻辑:
           它只匹配那些在 TCP/IP 上不使用 SSL
的连接请求。
database
        声明记录所匹配的数据库。值
        all 表明该记录匹配所有数据库,
        值 sameuser表示如果被请求的数据库和请求的用户同名,则匹配。
        samegroup 表示请求的用户必须是一个与数据库同名的组中的成员。
        在其他情况里,这就是一个特定的 PostgreSQL 的名字。
        我们可以通过用逗号分隔的方法声明多个数据库。
        一个包含数据库名的文件可以通过对该文件前缀 @ 来声明。
user
        为这条记录声明所匹配的PostgreSQL用户。值 all
表明它匹配于所有用户。
        否则,它就是特定 PostgreSQL
        用户的名字。多个用户名可以通过用逗号分隔的方法声明。组名字可以通过用 +
做组名字前缀来声明。
        一个包含用户名的文件可以通过在文件名前面前缀 @ 来声明。该文件必需和
        pg_hba.conf 在同一个目录。
CIDR-address
       声明这条记录匹配的客户端机器的 IP 地址范围。它包含一个标准的点分十进制的
IP 地址和一个 CIDR 掩码长度。
       (IP 地址只能用数值声明,不能用域或者主机名。)
       掩码长度表示客户端 IP 地址必须匹配的高位二进制位数。
       在给出的 IP 地址里,这个长度的右边的二进制位必须为零。
       在 IP 地址,/,和 CIDR 掩码长度之间不能有空白。
       典型的 CIDR 地址是
172.20.143.89/32,这表明一个主机,
       或者 172.20.143.0/24 表示一个网络。
       要声明单个主机,给 IPv4 地址声明 CIDR 掩码 32,给 IPv6
地址声明 128。
       以 IPv4 格式给出的 IP 地址会匹配那些拥有对应地址的 IPv6
连接,比如
       127.0.0.1 将匹配 IPv6 地址
::ffff:127.0.0.1。
       一个以 IPv6 格式给出的记录将只匹配 IPv6 连接,即使对应的地址在
IPv4-in-IPv6
       范围内。请注意如果系统的 C 库不支持 IPv6 地址,那么 IPv6
的格式将被拒绝。
        这个域只适用于 host,hostssl 和 hostnossl
记录。
IP-address
IP-mask
       这些方法可以用于作为 CIDR-address
表示法的替补。
       它不是声明掩码的长度,而是在另外一个字段里声明实际的掩码。
       比如,255.0.0.0 表示 IPv4 CIDR 掩码长度 8,而
255.255.255.255 表示 CIDR 掩码长度 32。
       同样的匹配逻辑将用于一个点分的 IP-mask
       这些字段只适用于 host, hostssl,
       和 hostnossl 记录。
authentication-method(认证方法)
        声明通过这条记录联接的时候使用的认证方法。
trust
        无条件地允许联接。这个方法允许任何可以与PostgreSQL
        数据库服务器联接的用户以他们期望的任意
        PostgreSQL 数据库用户身份进行联接,而不需要口令。
reject
        联接无条件拒绝。常用于从一个组中"过滤"某些主机。
md5
        要求客户端提供一个 MD5 加密的口令进行认证。
crypt
        要求客户端提供一个 crypt() 加密的口令用于认证。
        7.2 以前的客户端只能支持 crypt。
        对于 7.2 以及以后的客户端,我们建议使用 md5。
password
        要求客户端提供一个未加密的口令进行认证。
        因为口令是以明文形式在网络上传递的,
        所以我们不应该在不安全的网络上使用这个方式。
krb4
        用 Kerberos V4 认证用户。只有在进行
TCP/IP 联接的时候才能用。
krb5
        用 Kerberos V5 认证用户。只有在进行
TCP/IP 联接的时候才能用。
ident
        获取客户的操作系统名(对于 TCP/IP
联接,用户的身份是通过与运行在客户端上的
        ident
服务器联接进行判断的,对于本地联接,它是从操作系统获取的。)
        然后检查一下,看看用户是否允许以要求的数据库用户进行联接,
        方法是参照在 ident 关键字后面声明的映射。
pam
        使用操作系统提供的可插入的认证模块服务 (Pluggable
Authentication Modules)
我的配置示例如下:
# 本机localhost使用信任连接
local  all    all    
   trust
#127.0.0.1与192.168.1.0~254段IP地址访问时需要口令验证
#要让本机外的机器访问,除了在这设置外还要把postgresql.conf
#里的监听地址设置为:listen_addresses = '*'
host    all     all 
   127.0.0.1/32    md5
host    all     all 
   192.168.1.0/24  md5

postgresql.conf文件内容

    为了使postgresql支持tcp/ip连接,要设置监听地址行,参考内容如下:
# - Connection Settings -
listen_addresses = '*'       
#port = 5432
max_connections = 100

重新启动服务,现在的postgresql就支持tcp/ip连接了,就可以用psql进行测试了.


推荐阅读
  • 汇总了2023年7月7日最新的网络安全新闻和技术更新,包括最新的漏洞披露、工具发布及安全事件。 ... [详细]
  • Windows环境下Oracle数据库迁移实践
    本文详细记录了一次在Windows操作系统下将Oracle数据库的控制文件、数据文件及在线日志文件迁移至外部存储的过程,旨在为后续的集群环境部署做好准备。 ... [详细]
  • 随着Linux操作系统的广泛使用,确保用户账户及系统安全变得尤为重要。用户密码的复杂性直接关系到系统的整体安全性。本文将详细介绍如何在CentOS服务器上自定义密码规则,以增强系统的安全性。 ... [详细]
  • 如何高效学习鸿蒙操作系统:开发者指南
    本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ... [详细]
  • 实现Win10与Linux服务器的SSH无密码登录
    本文介绍了如何在Windows 10环境下使用Git工具,通过配置SSH密钥对,实现与Linux服务器的无密码登录。主要步骤包括生成本地公钥、上传至服务器以及配置服务器端的信任关系。 ... [详细]
  • PHP中Smarty模板引擎自定义函数详解
    本文详细介绍了如何在PHP的Smarty模板引擎中自定义函数,并通过具体示例演示了这些函数的使用方法和应用场景。适合PHP后端开发者学习。 ... [详细]
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • 服务器虚拟化存储设计,完美规划储存与资源,部署高性能虚拟化桌面
    规划部署虚拟桌面环境前,必须先估算目前所使用实体桌面环境的工作负载与IOPS性能,并慎选储存设备。唯有谨慎估算贴近实际的IOPS性能,才能 ... [详细]
  • 本文探讨了线性表中元素的删除方法,包括顺序表和链表的不同实现策略,以及这些策略在实际应用中的性能分析。 ... [详细]
  • 本文探讨了Linux环境下线程私有数据(Thread-Specific Data, TSD)的概念及其重要性,介绍了如何通过TSD技术避免多线程间全局变量冲突的问题,并提供了具体的实现方法和示例代码。 ... [详细]
  • 本文提供了一个关于AC自动机(Aho-Corasick Algorithm)的详细解析与实现方法,特别针对P3796题目进行了深入探讨。文章不仅涵盖了AC自动机的基本概念,还重点讲解了如何通过构建失败指针(fail pointer)来提高字符串匹配效率。 ... [详细]
  • 本文探讨了服务器系统架构的性能评估方法,包括性能评估的目的、步骤以及如何选择合适的度量标准。文章还介绍了几种常用的基准测试程序及其应用,并详细说明了Web服务器性能评估的关键指标与测试方法。 ... [详细]
  • 美团安全响应中心推出全新配送业务测试活动,带来双重福利,邀您共同参与! ... [详细]
author-avatar
婷518婷_239
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有