我可以为 JDBC 连接指定 *source* IP 地址吗?
Can I specify *source* IP address for a JDBC connection?
我有一个 Java 应用程序,它使用 JDBC 驱动程序连接到数据库。它恰好是一个 Postgres 实例,但我正在寻找一个通用的解决方案(如果它存在的话)。
运行应用程序的服务器有多个IP地址,都在同一个子网中。 JDBC 连接是使用服务器的 'primary' IP 建立的。
我可以play with Linux networking stack使用辅助 IP 地址与数据库建立传出连接。
有没有办法以编程方式指定 源 IP 地址将用于我的 JDBC 连接?
上下文:我们希望在不接触数据库的情况下移动应用程序,数据库有限制 IP 地址的规则,它将接受来自的连接。
我看到的唯一 hack 是建立 SSL 连接,return 一个新的套接字从自定义 SSLSocketFactory. 绑定到辅助 IP
一些谷歌搜索表明它取决于特定的 JDBC 驱动程序。
对于 MySQL,它是通过 URL 上的 属性 完成的:
jdbc:mysql://localhost:3306/sakila?localSocketAddress=123.33.33.33
(见https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html)
在 Postgres 的情况下,看起来你最好的选择是 socketFactory
URL 属性 - 只需创建普通的旧套接字,而不是SSL 套接字。
(见https://jdbc.postgresql.org/documentation/head/connect.html#connection-parameters)
以下 PR 添加功能以在 PostgreSQL JDBC 驱动程序上配置 localSocketAddress:https://github.com/pgjdbc/pgjdbc/pull/2082
我有一个 Java 应用程序,它使用 JDBC 驱动程序连接到数据库。它恰好是一个 Postgres 实例,但我正在寻找一个通用的解决方案(如果它存在的话)。
运行应用程序的服务器有多个IP地址,都在同一个子网中。 JDBC 连接是使用服务器的 'primary' IP 建立的。
我可以play with Linux networking stack使用辅助 IP 地址与数据库建立传出连接。
有没有办法以编程方式指定 源 IP 地址将用于我的 JDBC 连接?
上下文:我们希望在不接触数据库的情况下移动应用程序,数据库有限制 IP 地址的规则,它将接受来自的连接。
我看到的唯一 hack 是建立 SSL 连接,return 一个新的套接字从自定义 SSLSocketFactory. 绑定到辅助 IP
一些谷歌搜索表明它取决于特定的 JDBC 驱动程序。
对于 MySQL,它是通过 URL 上的 属性 完成的:
jdbc:mysql://localhost:3306/sakila?localSocketAddress=123.33.33.33
(见https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html)
在 Postgres 的情况下,看起来你最好的选择是 socketFactory
URL 属性 - 只需创建普通的旧套接字,而不是SSL 套接字。
(见https://jdbc.postgresql.org/documentation/head/connect.html#connection-parameters)
以下 PR 添加功能以在 PostgreSQL JDBC 驱动程序上配置 localSocketAddress:https://github.com/pgjdbc/pgjdbc/pull/2082