2017-07-25 59 views
0

我有一個使用JDBC驅動程序連接到數據庫的Java應用程序。它恰好是一個Postgres實例,但如果它存在,我正在尋找一個通用解決方案。我可以爲JDBC連接指定*源* IP地址嗎?

運行應用程序的服務器有多個IP地址,全部在同一個子網中。 JDBC連接使用服務器的「主」IP來建立。

我可以play with Linux networking stack與數據庫的傳出連接使用輔助IP地址。

有沒有辦法以編程方式指定源IP地址將用於我的JDBC連接?


語境:我們要在不接觸數據庫,其中有規則限制IP地址,將接受來自連接移動應用程序。

我看到的唯一一個黑客會做一個SSL連接,並返回一個新的套接字綁定到從IP地址從自定義SSLSocketFactory

+0

有一個'ClientHostname'屬性設定通過'java.sql.Connection.setClientInfo()',那不是做在某些情況下把戲? – Aaron

+0

值得一看@Aaron,但我恐怕這是爲了幫助數據庫做它的事情,而不是幫助我達成目標。我需要用防火牆玩技巧,而不是數據庫。 – ixe013

+0

是的,這絕對只是JDBC元數據,我非常懷疑它會改變網絡層面的一件事情。 – Aaron

回答

3

一些Google搜索建議它依賴於特定的JDBC驅動程序。

對於MySQL的,它通過屬性來完成對網址:

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

+1

我使用的是Postgres,但這就是我一直在尋找的東西。 Postgres允許以同樣的方式指定一個SocketFactory。所以我想有一種方法,但它會是數據庫特定的... – ixe013

相關問題