LightDB/PostgreSQL 設定LightDB訪問白名單pg_hba.conf

哎呀我的天吶發表於2022-05-18

ltsql登陸的時候被拒絕了,其實這個問題比較簡單,限制了使用者ip登陸

[lightdb@hs-10-19-36-28 ~]$ PGPASSWORD=benchmarksql ltsql -U benchmarksql -d benchmarksql1000 -h 10.20.30.231 -p 5678
ltsql: error: FATAL:  no pg_hba.conf entry for host "10.19.36.28", user "benchmarksql", database "benchmarksql1000", SSL off

LightDB客戶端認證是由配置檔案pg_hba.conf控制的。HBA的意思是"host-based authentication", 也就是基於主機的認證。

相比於MySQL和Oracle,訪問控制策略MySQL使用'user'@'ip'中的ip控制允許使用者從哪裡建立連線登陸,而Oracle是配置sqlnet.ora中配置白名單來允許哪些IP訪問。

tcp.validnode_checking=yes
tcp.invited_nodes=(10.0.0.109,127.0.0.1) #必須包含資料庫所在伺服器ip,否則監聽無法啟動
tcp.excluded_nodes=(192.168.220.1)       #黑名單

而Oracle中監聽中配置0.0.0.0是允許外界透過本機所有ip建立連線訪問,這是另外一個事情。

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
  )
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = cdb1)
      (ORACLE_HOME = /u01/oracle/products/19.3)
      (SID_NAME = cdb)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = cdb2)
      (ORACLE_HOME = /u01/oracle/products/19.3)
      (SID_NAME = cdb2)
    )
  )

pg_hba.conf配置檔案如下

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all             all             0.0.0.0/0               trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust

該配置檔案有5個引數,分別為:
TYPE(主機型別)
DATABASE(資料庫名)
USER(使用者名稱)
ADDRESS(IP地址/掩碼)
METHOD(加密方法)

TYPE有4個值

  • local:使用Unix-domainsocket

  • host:使用TCP/IP連線,可以是SSL的,也可以不是

  • hostssl:必須是SSL的

  • hostnossl:必須是非SSL的

DATABASE(資料庫名)

  • all,all表示所有,但不包括replication。多個資料庫用“,”隔開。

  • sameuser

  • samerole

  • replication

USER(使用者名稱)

  • 可以為"all",表示所有,也可以具體指定一個使用者。多個使用者用“,”隔開。和DATABASE一樣,也可以將配置放到檔案中,檔名加上字首@

ADDRESS

    可以是為一個主機名,或者由IP地址和CIDR掩碼組成。掩碼可以為0-32(IPv4)或者0-128(IPv6)間的一個整數,32表示子網掩碼為255.255.255.255,24表示子網掩碼為255.255.255.0。主機名以“.”開頭。

samehost可以匹配所有主機

samenet可以匹配同一個掩碼內的所有主機。


    例:192.168.10.122/32表示單一主機,192.168.10.0/24表示192.168.0.1~192.168.0.255網段內所有主機,0.0.0.0/0表示所有主機。

METHOD(密碼加密策略)

  • password表示以明文方式傳送密碼

  • md5和scram-sha-256會以對應的方式加密再傳送密碼

測試,配置如下hba.conf檔案,資料庫231伺服器上

# TYPE  DATABASE        USER            ADDRESS                 METHOD
#"local" is for Unix domain socket connections only
# local   all             all                                     trust
# IPv4 local connections:
# host    all             all             127.0.0.1/32            trust
host    all             all             10.20.30.193/32               md5
host    all             all             10.20.30.231/32               md5
# IPv6 local connections:
#host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust

透過231的127.0.0.1 地址登入,如下可以看到不在白名單內

[lightdb@HS-10-20-30-231 data]$  PGPASSWORD=benchmarksql ltsql -U benchmarksql -d benchmarksql1000 -h 127.0.0.1 -p 5678
ltsql: error: FATAL:  no pg_hba.conf entry for host "127.0.0.1", user "benchmarksql", database "benchmarksql1000", SSL off

透過231地址登入,可以登入,在白名單內,同樣

[lightdb@HS-10-20-30-231 data]$  PGPASSWORD=benchmarksql ltsql -U benchmarksql -d benchmarksql1000 -h 10.20.30.231 -p 5678
ltsql (13.3-22.1)
Type "help" for help.
benchmarksql@benchmarksql1000=> 
[lightdb@hs-10-20-30-193 ~]$ PGPASSWORD=benchmarksql ltsql -U benchmarksql -d benchmarksql1000 -h 10.20.30.231 -p 5678
ltsql (13.3-22.1)
Type "help" for help.
benchmarksql@benchmarksql1000=>

透過28伺服器無法登入

[lightdb@hs-10-19-36-28 ~]$ PGPASSWORD=benchmarksql ltsql -U benchmarksql -d benchmarksql1000 -h 10.20.30.231 -p 5678
ltsql: error: FATAL:  no pg_hba.conf entry for host "10.19.36.28", user "benchmarksql", database "benchmarksql1000", SSL off


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29990276/viewspace-2895031/,如需轉載,請註明出處,否則將追究法律責任。

相關文章