2015-10-15 79 views
1

我正在努力琢磨着我的頭腦。 這個簡單的一行代碼:無論主機名如何,JDBC都會嘗試連接到「本地主機」

DriverManager.getConnection("jdbc:mysql://machine1:3306/information_schema", "user1", "password"); 

運行machine1上導致錯誤:

1045 Access denied for user 'user1'@'localhost' (using password: YES) 

但是有上machine2運行還是沒有問題的任何其他機器爲這一問題。

user1實際上有兩個不同的密碼,一個是password如果連接到machine1製成(這是機器名),一種是password1如果連接到localhost製成。

聽起來很瘋狂,但我們的IT部門堅持認爲這是出於安全目的。因此,如果您可以忽略這種瘋狂,問題很明顯:我要求JDBC使用用戶名user1和密碼password連接到machine1,這是正確的,但它以某種方式嘗試連接到localhost並因此發生錯誤。

我懷疑在machine1,有某種配置委託從machine1localhost的所有內部連接。這就是爲什麼只有當我從machine1運行該命令時纔會出現錯誤,並且如果從別處運行該命令,則不會發生此錯誤。

修改代碼連接到localhost將工作,但框架不允許我這樣做。

有什麼想法?

+0

也許將用戶名設置爲user1 @ machine1? – Chet

+0

@GordThompson是的,'localhost'一切都很好。 –

回答

3

我討厭這個,當我將我的頭靠在牆上5個小時,然後我把問題發佈到所以我找到了答案。

問題是,在/ etc/host中,machine1指向與localhost(127.0.0.1)相同的地址。修改文件使machine1指向真正的IP地址(例如10.240.3.167)將解決問題。

+0

感謝發佈。我無法重現這個問題,但這可以解釋它。我希望它能夠在別人的頭上減少一些磨損。 ;) –

+0

@GordThompson是的,謝謝你反正看問題 –

0

你在machine1上運行這段代碼嗎?在這種情況下,錯誤是正確的,因爲localhost本身。你是否嘗試過從運行你的代碼的同一臺機器上通過MySQL命令行進行連接?我懷疑沒有在MySQL中設置證書來允許來自本地主機的連接。

我只是重新閱讀。從machine1連接時需要使用本地主機密碼。 MySQL使用@localhost作爲連接來自的地方。 jdbc用於dns的值不相關。