【发布时间】:2013-08-10 15:14:15
【问题描述】:
我有一个 Java 应用程序需要通过 VPN 连接到远程 PostgreSQL 数据库。以下是相关代码:
Class.forName("org.postgresql.Driver");
Connection con = null;
con = DriverManager.getConnection("jdbc:postgresql://" + sqlHost + ":" + sqlPort + "/mydb", username, password);
这会引发错误
org.postgresql.util.PSQLException: FATAL: pg_hba.conf rejects connection for host "172.16.7.5", user "xxxxx", database "xxxxx", SSL off
sqlHost 中的主机 IP 地址实际上是 192.168.12.55,但是如果您注意到错误消息说它正在连接到主机 172.16.7.5(这是 VPN 分配的 IP 地址)。
我可以使用 PGAdmin 和 使用 Python 的 psocopg2 模块在完全相同的 VPN 上使用完全相同的连接参数连接到这个 PostgreSQL 数据库。这是等效的 Python 代码:
conn = psycopg2.connect("dbname=mydb user="+username+" password="+password+" host="+sqlHost+" port="+sqlPort)
为什么世界上只有 Java 有这方面的问题?由于连接通过 PGAdmin 和 Python 工作,我假设 Java 中有一些设置我使用不正确,但我找不到任何东西。
编辑:在阅读更多 PostgreSQL 文档后,我发现列出错误主机名的问题不是问题的一部分,而只是 PostgreSQL 通过 VPN 看到我的计算机的方式。然而问题仍未解决。
【问题讨论】:
-
我相信这属于Super User(或者可能是Server Fault)
-
我认为它更适合 StackOverflow,因为它与我正在创建的应用程序的代码有关。我需要知道 Java 的 SQL 连接管理器中是否有一个特殊参数允许它在 VPN 上正常工作。
标签: java postgresql vpn psycopg2