首页 > 解决方案 > Postgresql 远程访问没有主机的 pg_hba.conf 条目

问题描述

我正在尝试远程访问安装在 IP AAAA 的服务器上的 postgresql 有两台服务器,其中一台具有 IP AAAA,其中安装了 postgresql;另一个有IP BBBB

我已经编辑/etc/postgresql/10/main/pg_hba.conf并添加了以下几行

host my_db db_user B.B.B.B/32 md5
host my_db db_user A.A.A.A/32 md5

我还编辑/etc/postgresql/10/main/postgresql.conf并设置listen_addresses'*',如下所示:

#---------------------------------------------------------------------    
---------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*'          # what IP address(es) to listen on;
                                    # comma-separated list of     addresses;
                                    # defaults to 'localhost'; use '*' for all
                                    # (change requires restart)
port = 5432                             # (change requires restart)
max_connections = 100                   # (change requires restart)

我还允许通过 ufw 中的端口 5432 进行连接:

5432                       ALLOW       Anywhere                  
5432 (v6)                  ALLOW       Anywhere (v6)             

现在,如果我在服务器 A 中(安装了 postgres)并执行 psql"postgresql://db_user:password@A.A.A.A:5432/my_db"它连接正常。但是,如果我使用 IP BBBB 从服务器执行此操作,则会收到此错误:

psql: FATAL:  no pg_hba.conf entry for host "B.B.B.B", user "db_user", database "my_db", SSL on
FATAL:  no pg_hba.conf entry for host "B.B.B.B", user "db_user", database "my_db", SSL off

我真的不明白错误在哪里。两个条目pg_hba.conf看起来相同,但一个有效,另一个无效。

标签: postgresqlpg-hba.conf

解决方案


我在 Docker 上的 PostgreSQL 实例也有类似的问题。我花了几个小时来弄清楚如何解决它。我分享我的经验,希望能帮助其他面临同样问题的人。有两个pg_hba.conf文件具有以下路径:

  1. /var/lib/postgresql/data/pg_hba.conf
  2. /etc/postgresql/12/main/pg_hba.conf

我正在修改第一个,但不知道第二个。我使用了一个技巧来检查我是否正在处理正确的文件。我注释掉了文件的所有行并重新启动了 PostgreSQL 服务。然后我看到我仍然能够从 Docker 容器内部连接到 PostgreSQL 服务。然后我寻找另一个名称相似的文件,所以我找到了第二个。我修改/etc/postgresql/12/main/pg_hba.conf,通过运行重启PostgreSQL service postgresql restart,修改生效。


推荐阅读