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

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/ 下面。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章