MySQL在java中被拒绝访问,已授予工作台访问权限
我一直在使用计算机上的java(我们称之为PC1)连接到服务器上的数据库,直到最近,它还没有出现任何错误 通过工作,我的意思是我可以使用PC1上的java连接到服务器,并使用select语句从表中访问所需的信息 所做的唯一更改是PC1和服务器上的ip地址。 在更改了IP地址之后,我更新了mysql中的grant表,但是,我得到了以下错误:MySQL在java中被拒绝访问,已授予工作台访问权限,java,mysql,Java,Mysql,我一直在使用计算机上的java(我们称之为PC1)连接到服务器上的数据库,直到最近,它还没有出现任何错误 通过工作,我的意思是我可以使用PC1上的java连接到服务器,并使用select语句从表中访问所需的信息 所做的唯一更改是PC1和服务器上的ip地址。 在更改了IP地址之后,我更新了mysql中的grant表,但是,我得到了以下错误: java.sql.SQLException: Access denied for user 'robot'@'aa-PC' (using password:
java.sql.SQLException: Access denied for user 'robot'@'aa-PC' (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:885)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3421)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1247)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2775)
at com.mysql.jdbc.Connection.<init>(Connection.java:1555)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at WriteToMySql.connection1(WriteToMySql.java:26)
at WriteToMySql.main(WriteToMySql.java:259)
注意:“用户”是数据库的名称
任何帮助都将不胜感激。
多谢各位
编辑:
出于测试目的,我尝试关闭防火墙,但没有帮助。如果更改客户端(PC1)的ip地址,请确保在授予用户“robot”新权限时也更新了主机字段。检查表“db”、“user”和“host”。我认为代码示例中可能有错误-当您在文章前面提到PC1应该连接到服务器时,它连接到了PC1IPAddress。在我们继续之前,我们只想确认这是一个打字错误,否则PC1将连接到自身 如果您具有服务器的管理访问权限,请以root用户身份连接到MySQL,并使用此查询显示已配置的用户,并确保主机字段正确:
SELECT user,host FROM MySQL.user WHERE user='robot'代码>
如果上述情况属实,我建议研究Windows用户身份验证。MySQL返回的是Windows计算机名(“aa-PC”)而不是其IP地址,这一事实似乎表明它可能正在尝试使用Windows域凭据进行身份验证:trytelnet host 3306
并检查它是否允许远程访问。p,允许远程访问,那么您的代码应该可以正常工作,这就是为什么我感到困惑的原因。真正让我困惑的是,我能够通过SQL workbench进行连接,但不能通过java进行连接
String host = "jdbc:mysql://PC1IPAdress:3306/users";
String user= "robot";
String password="mypassword";
public void connect()
{
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("worked"); //this gets printed
connect = DriverManager.getConnection(host, user, password);
System.out.println("works"); // this does not get printed due to error
stmt = connect.createStatement();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}