您的位置:首页 > 数据库

postgresql Connection to database failed: FATAL: no pg_hba.conf entry for host "10.129.195.161", us

2016-09-26 12:24 1136 查看
Connection to database failed: FATAL: no pg_hba.conf entry for host "10.129.195.161", user "appexternal", database "insightdb", SSL off

核心难点,遇到这个问题排查了很长时间没有相关文档:
从两个方便排查:

1 外部ip请求被拒绝。

2 db server 端开了ssl 协议对应的,c 端的没有开启ssl协议。
笔者的排查过程:

1 对外部请求判断是否被拒。可以查看一下配置:

1.修改postgresql.conf文件,将数据库服务器的监听模式修改为监听所有主机发出的连接请求。

定位到#listen_addresses='localhost’。PostgreSQL安装完成后,默认是只接受来在本机localhost的连接请 求。将行开头都#去掉,将行内容修改为listen_addresses='*'来允许数据库服务器监听来自任何主机的连接请求。

2.修改pg_hba.conf文件,配置用户的访问权限(#开头的行是注释内容):

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

    # IPv4 local connections:

    host        all                   all              127.0.0.1/32                md5

    host        testdb             postgres    192.1.1.2/32                md5

host all all 0.0.0.0/0 md5

  以上红色部分为新添加的项。

  以上内容需要注意以下两点:

   1. 数据库名与用户名注意大小写,PostgreSQL是区分大小的;

   2. CIDR-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地址即可;

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

可以通过:postgresql-9.5.4/src/test/examples/testlibpq.c 测试连接是否正常。

2 要考虑下是否要支持ssl 协议了,编译libpq.so 的时候要添加 添加ssl 选项。

一开始和客户狂车牌后来发现是 后来发现是编译没有加入ssl 协议。

我的配置是可选参数设置如下:

./configure --prefix=/opt/pgsql9.3.2 --with-pgport=5432 --with-perl --with-python --with-tcl --with-openssl --with-pam  --without-ldap --with-libxml  --with-libxslt 
--enable-thread-safety  --with-wal-blocksize=16 --with-blocksize=16 --enable-dtrace --enable-debug

配置选项说明:

--prefix=/opt/pgsql9.3.2:安装所有文件在/opt/pgsql9.3.2中(取代默认时的/usr/local/pgsql)。

--with-pgport=5432:为服务器和客户端设置默认端口号。默认是5432。

--with-perl:编译PL/Perl服务端语言。

--with-python:编译PL/Python服务端语言。

--with-tcl:编译PL/Tcl服务端语言。

--with-openssl:编译支持SLL(加密)连接。这需要安装OpenSSL包。

--with-pam:编译支持PAM(Pluggable Authentication Modules,可插拔认证模块)

--without-ldap:编译支持认证和连接参数检查

--with-libxml:编译libxml(支持SQL/XML),支持这个选项需要Libxml 2.6.23及最新版

--with-libxslt:编译xml2模块,使用libxslt

--enable-thread-safety:让客户端库是线程安全的

--with-wal-blocksize=16:WAL:预写式日志(Write-Ahead Logging)

设置WAL的block size,以MB为单位。这是在WAL日志中的每个独立文件的大小。为了控制WAL日志传送的粒度去调整其大小,这可能是非常有用的。默认为16MB。这个值必须是2的1到64次方(MB)。注意,改变这个值需要一个initdb。

--with-blocksize=16:设置block size,以KB为单位。这是表的存储和IO单元。默认为8K,适用于大多数情况;但是在特殊场合中,其他的值可能是非常有用的。这个值必须是2的1到32次方(KB)。注意,改变这个值需要一个initdb。

--enable-dtrace:编译PostgreSQL支持动态跟踪工具DTrace

--enable-debug:把所有程序和库以带有调试符号的方式编译

--enable-nls[=LANGUAGES]:打开本地语言支持(NLS),即以非英文显示程序的信息的能力。LANGUAGES是一个空格分隔的语言代码列表,标识你想支持的语言。比如--enable-nls='de fr'。(你提供的列表和实际支持的列表之间的交集将会自动计算出来。)如果你没有声明一个列表,那么就安装所有可用的翻译。

(还可以在--enable-debug前,添加两个选项:--enable-depend --enable-cassert)

配置过程可能会遇到依赖的动态库缺失,  安装这些缺失的库即可。

记录下我这里的缺失lib的安装:

dtrace工具的安装:

PostgreSQL支持动态跟踪, 可以通过dtrace或者systemtap工具统计相关探针的信息

生成的libpq.so 在postgresql-9.5.4/src/interfaces/libpq/ 下面。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  postgresql
相关文章推荐