我正在努力地敲打我的脑袋。 这段简单的代码:
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
上,有某种配置将所有内部连接委托给machine1
到localhost
。这就是为什么错误仅在我从machine1
运行该命令时发生,并且如果我从其他地方运行它,则永远不会发生。
修改连接到localhost
的代码会起作用,但框架不允许我这样做。
有什么想法吗?
答案 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的值是不相关的。