JDBC尝试连接到" localhost"无论主机名

时间:2015-10-15 22:42:25

标签: java mysql 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使用用户名machine1和密码user1连接到password,这是正确的,但它以某种方式尝试连接到localhost,因此错误。

我怀疑在machine1上,有某种配置将所有内部连接委托给machine1localhost。这就是为什么错误仅在我从machine1运行该命令时发生,并且如果我从其他地方运行它,则永远不会发生。

修改连接到localhost的代码会起作用,但框架不允许我这样做。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

我讨厌这个,当我把头撞到墙上5个小时,在我发布问题后的那一刻,我找到了答案。

问题是在/ etc / host中,for (let i of arr)指向与localhost(127.0.0.1)相同的地址。修改文件以使.forEach()指向真实的IP地址(例如machine1)将解决问题。

答案 1 :(得分:0)

您是否在machine1上运行此代码?在这种情况下,错误是正确的,因为localhost本身。您是否尝试通过MySQL命令行从运行代码的同一台机器进行连接?我怀疑在MySQL中没有设置凭据以允许来自localhost的连接。

我刚刚重读。从machine1连接时,需要使用localhost密码。 MySQL使用@localhost作为连接的来源。 jdbc用于dns的值是不相关的。