暂无图片
暂无图片
1
暂无图片
暂无图片
1
暂无图片

LightDB/PostgreSQL 设置LightDB访问白名单pg_hba.conf

原创 姚崇 2022-05-18
1518

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 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
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

墨天轮福利君
暂无图片
2年前
评论
暂无图片 0
您好,您的文章已入选墨力原创作者计划合格奖,10墨值奖励已经到账请查收! ❤️我们还会实时派发您的流量收益。
2年前
暂无图片 点赞
评论