Postgres密码验证仅在使用私有IP访问时失败

问题描述 投票:0回答:1

我设置了 Postgres 16 并将其配置为从两个 IP 进行访问:我的家庭公共 IP 和与数据库位于同一专用网络上的另一个 VPS 的专用 IP。我发现虽然在家可以登录,但在我的 VPS(同一专用网络上的 VPS)上却无法登录

pg_hba.conf 是这样的:

host    all             all             107.x.x.x/32                 scram-sha-256
host    all             all             10.x.x.x/20            scram-sha-256

在客户端(家庭和 VPS),我使用 Python3/SQLALchemy/psycopg2 进行连接。然而,当在 VPS 上运行脚本时,我得到了

  password authentication failed

然后我将用于访问数据库的IP从私有IP更改为数据库的公共IP。我还更改了

pg_hba.conf
以允许VPS的公共IP,突然之间,我可以连接了!

host    all             all             107.x.x.x/32                 scram-sha-256
host    all             all             10.x.x.x/20            scram-sha-256

host    all             all             138.x.x.x/32            scram-sha-256

很高兴我现在可以访问我的数据库,但这是否违背了将我的数据库和 VPS 放在同一专用网络上的目的?如果我使用公共 IP 访问数据库,即使我从同一机架上的服务器访问它,它也会被公开路由,对吧?我不确定是否是网络或数据库配置方面导致了问题。我隐藏了 IP,所以你无法判断我是否在 IP 范围上做错了什么,但在这种情况下,它不会给出密码错误,不是吗?

为什么从公共 IP 接受的密码会被私有 IP 拒绝?

针对问题的答复进行编辑:

使用本地IP连接时客户端上的完整错误:

    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) connection to server at "10.108.0.2", port 6262 failed: FATAL:  password authentication failed for user "myapp"

我的 postgres 日志中的最后一次连接尝试是我尝试使用公共 ip 进行连接。根据时间点,我知道正是该尝试导致了日志中显示的失败尝试:

2023-10-03 02:31:47.832 EDT [12728] FATAL:  no pg_hba.conf entry for host "138.x.x.x", user "siteapp", database "sitedata", SSL encryption
2023-10-03 02:31:47.837 EDT [12729] FATAL:  no pg_hba.conf entry for host "138.197.16.205", user "siteapp", database "sitedata", no encryption
2023-10-03 02:36:15.206 EDT [12712] LOG:  checkpoint starting: time
2023-10-03 02:36:15.240 EDT [12712] LOG:  checkpoint complete: wrote 3 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.003 s, sync=0.012 s, total=0.034 s; sync files=2, longest=0.008 s, average=0.006 s; distance=0 kB, estimate=0 kB; lsn=0/1BCF0B0, redo lsn=0/1BCF078
postgresql authentication passwords ip pg-hba.conf
1个回答
0
投票

错误信息

password authentication failed for user "%s"

来自 PostgreSQL 服务器。如果您在 PostgreSQL 服务器日志中看不到相应的消息,则意味着日志记录被配置为不记录错误(您的情况并非如此),或者客户端尝试连接到与其所在集群不同的 PostgreSQL 集群。您显示的日志文件。

© www.soinside.com 2019 - 2024. All rights reserved.