Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL在java中被拒绝访问,已授予工作台访问权限_Java_Mysql - Fatal编程技术网

MySQL在java中被拒绝访问,已授予工作台访问权限

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(我们称之为PC1)连接到服务器上的数据库,直到最近,它还没有出现任何错误

通过工作,我的意思是我可以使用PC1上的java连接到服务器,并使用select语句从表中访问所需的信息

所做的唯一更改是PC1和服务器上的ip地址。 在更改了IP地址之后,我更新了mysql中的grant表,但是,我得到了以下错误:

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域凭据进行身份验证:

try
telnet 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();
    }

}