java.sql.SQLException:对用户'root'@'remotehost'拒绝访问(使用密码:YES)

时间:2016-04-27 15:00:32

标签: java mysql jdbc mysql-workbench sqlexception

我正在尝试编写一个示例jdbc程序来连接到远程计算机

中的mysql db
    // JDBC driver name and database URL
    String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    String DB_URL = "jdbc:mysql://<remote machine>/<database>"

    //  Database credentials
    String USER = "root";
    String PASS = "mnlinux";
    Class.forName(JDBC_DRIVER);
    Connection con = DriverManager.getConnection(DB_URL, USER, PASS);
    Statement stmt = con.createStatement();
    String sql = "SELECT x FROM t";
    ResultSet resultSet = stmt.executeQuery(sql);
    while(resultSet.next()){
        //Retrieve by column name
        int id  = resultSet.getInt("x");
        //Display values
        System.out.print("ID: " + id);
    }
    resultSet.close();
    stmt.close();
    con.close();


*Its returning Exception in thread "main" java.sql.SQLException: Access denied for user 'root'@'CurrentMachine' (using password: YES)*

执行DriverManager.getConnection(DB_URL, USER, PASS);

请帮我连接数据库。 我的MySQL出现了&amp;运行。 dbserver和amp; currentmachine在同一网络中(我能ping)。

提前致谢。

3 个答案:

答案 0 :(得分:1)

允许从任何ip完全访问数据库或用你的IP替换%,从那里你想要访问数据库并尝试。

GRANT ALL PRIVILEGES ON *.* TO '<mysql user>'@'%'  WITH GRANT OPTION;
FLUSH PRIVILEGES ;

答案 1 :(得分:1)

您需要为该用户授予权限

GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

MySql需要权限用户以及连接远程地址。

答案 2 :(得分:0)

通常,根MySQL用户无法从远程计算机连接,除非您进行编辑。

如果您在当前计算机上运行MySQL Workbench,请尝试使用您在java中使用的凭据通过网络进行连接。如果它在Workbench中不起作用,那么它显然不适用于java。

您可以使用以下SQL创建新用户:

CREATE USER 'someuser'@'%' IDENTIFIED BY 'somepassword';
GRANT ALL PRIVILEGES ON yourdatabase.* TO 'someuser'@'%' WITH GRANT OPTION;

或使用Workbench来执行此操作(在MySQL计算机上)。通常不建议以root身份连接,但是可以启动并运行。最终,您应该切换到专用用户,并根据您的应用程序,实现适当的安全性。

请注意:上面的一些答案建议添加权限...但是,root用户已经具有这些权限,并且与root连接失败不是特权问题。这是因为root无法从远程计算机连接。所以......添加一个新用户并授予该用户权限。