Postgresql 客户端连接问题
Postgresql 客户端连接问题
by dodojava from http://m.oschina.net/blog/35954
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文件内容:
文件 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进行测试了.
Postgresql 客户端连接问题相关推荐
- u8系统怎么连接服务器,怎么U8客户端连接服务器
怎么U8客户端连接服务器 内容精选 换一换 本章节为您介绍以下内容:准备弹性云服务器作为GDS服务器在使用GDS导入导出数据之前,需要准备一台或多台与GaussDB(DWS) 集群在相同VPC内的Li ...
- pg数据库开启远程连接_如何运行远程客户端连接postgresql数据库
如何运行远程客户端连接 postgresql 数据库 前提条件是 2 个: 1 , pg_hba.conf 里面配置了运行远程客户机连接 pg_hba.conf 配置后需要重新加载 reload 生效 ...
- PostgreSQL数据库服务端监听设置及客户端连接方法教程
众所周知,PostgreSQL 是一个自由的对象-关系数据库服务器(数据库管理系统),是一个可以免费使用的开放源代码数据库系统.本文详细介绍了PostgreSQL数据库服务端监听设置及客户端连接方法, ...
- PostgreSQL 10.1 手册_部分 III. 服务器管理_第 19 章 服务器配置_19.11. 客户端连接默认值...
19.11. 客户端连接默认值 19.11.1. 语句行为 19.11.2. 区域和格式化 19.11.3. 共享库预载入 19.11.4. 其他默认值 19.11.1. 语句行为 search_pa ...
- 第四节 RabbitMQ在C#端的应用-客户端连接
第四节 RabbitMQ在C#端的应用-客户端连接 原文:第四节 RabbitMQ在C#端的应用-客户端连接 版权声明:未经本人同意,不得转载该文章,谢谢 https://blog.csdn.net/ ...
- 005,使用Java客户端连接RabbitMQ,构造我们的第一个Publish和Consumer应用
2019独角兽企业重金招聘Python工程师标准>>> 官网地址:http://www.rabbitmq.com/documentation.html 如下图: 在客户端连接服 ...
- VMware ESXi客户端连接控制台时提示“VMRC控制台连接已断开...正在尝试重新连接“的解决方法
VMware ESXi客户端连接控制台时提示"VMRC控制台连接已断开...正在尝试重新连接"的解决方法 参考文章: (1)VMware ESXi客户端连接控制台时提示" ...
- WebSocket客户端连接不上和掉线的问题以及解决方案
WebSocket客户端连接不上和掉线的问题以及解决方案 参考文章: (1)WebSocket客户端连接不上和掉线的问题以及解决方案 (2)http://www.cnblogs.com/goeasyc ...
- 5G加速下的云办公时代来临?阿里云新品服务器 - 无影云桌面的服务开通与体验,本地客户端连接阿里云无影云桌面演示
阿里云服务器 - 无影云桌面的服务开通与体验 第一章:服务开通 ① 服务器购买 ② 服务器网络开通 ③ 创建并关联用户 第二章:无影云桌面体验 ① 下载并安装客户端 ② 本地客户端连接无影云服务器 ③ ...
- 网狐棋牌客户端连接服务器修改方法6,网狐游戏服务器 客户端连接
网狐游戏服务器 客户端连接 内容精选 换一换 本章节指导您使用MongoDB客户端和Robo 3T工具,通过公网连接副本集实例.用户可以直接操作副本集主节点和备节点.主节点用于读写请求,您可以连接主节 ...
最新文章
- 判断objcet是否是map类型_57、递归+树的深度+map-二叉搜索树的平衡性
- 从“小而精”到“大而广”,知乎怎样一步步迈向全民皆知?
- linux上安装mysql5.7
- 017 矩阵中的路径
- 110. Balanced Binary Tree
- 工作215:点击按钮报错
- python del函数_python中del函数的垃圾回收
- bkg bnc_BNC的完整形式是什么?
- 杭电2066一个人的旅行(spfa)
- 【信息系统项目管理师】第4章-项目整体管理 知识点详细整理
- Linux系统下安装Mysql
- 新年干货 | NLP一路走来的经验之谈
- 安卓Gallery配合ImageSwitcher不显示图片
- 安卓rom制作教程_MIUI官方ROM(卡刷包、线刷包)合集
- Wendy Shijia 的「 Escher‘s Gallery」可视化作品复现系列文章(三)
- 威联通NAS TS-873A 实测
- cesium 实现雷达波
- 如何删除QQ中的锁定QQ热键Ctrl+Alt+L?
- 阿里云 mysql 导出数据库_阿里云服务器如何操作导出数据库
- 编写脚本程序程序,将当前目录下所有的.txt文件更名为.doc文件。