Java MySql远程访问被拒绝

Java MySql远程访问被拒绝,java,mysql,remote-access,Java,Mysql,Remote Access,我正在尝试连接到mysql数据库。当我试图通过mysql Workbench进行连接时,我只能通过java应用程序进行连接,它说: Caused by: java.sql.SQLException: Access denied for user 'root'@'1.2.3.4' (using password: YES) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1084) at com.mysql.j

我正在尝试连接到mysql数据库。当我试图通过mysql Workbench进行连接时,我只能通过java应用程序进行连接,它说:

Caused by: java.sql.SQLException: Access denied for user 'root'@'1.2.3.4' (using password: YES)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1084)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4232)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4164)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:926)
    at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1748)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1288)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2506)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2539)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2321)
数据源定义为:

<bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://3.3.3.3:3306"/>
    <property name="username" value="root"/>
    <property name="password" value="12345"/>
</bean>
能帮我解决这个问题吗

编辑:

我使用的是jdbcTemplate,错误就在这一行:

getJdbcTemplate().queryForList(sql.toString());

您需要为
'root'@'localhost'
创建一个帐户,以及您已经拥有的
'root'@%
帐户(使用相同的密码)。为什么?看。以下是相关部分:

其中两个帐户的用户名为monty,密码为some_pass。这两个帐户都是超级用户帐户,具有执行任何操作的完全权限。“monty”@“localhost”帐户只能在从本地主机连接时使用。“monty”@“%”帐户对主机部件使用“%”通配符,因此它可用于从任何主机进行连接

monty必须拥有两个帐户,才能从monty所在的任何位置进行连接。如果没有localhost帐户,当monty从本地主机连接时,mysql\u install\u db创建的localhost的匿名用户帐户将优先。因此,蒙蒂将被视为匿名用户。原因是匿名用户帐户的主机列值比“monty”@“%”帐户更为具体,因此在用户表排序顺序中出现得更早。(第6.2.4节“访问控制,第1阶段:连接验证”中讨论了用户表排序。)


发布开放连接的代码对不起,我错过了。查看编辑我需要查看您的代码以查找问题所在。我已对其进行了编辑。当我尝试getJdbcTemplate().getDatasource().getConnection()时,我得到了相同的错误。我的应用程序正在本地pc上运行,但db是远程的。还有一个root@localhost用户也创建了。我看不出mysql workbench上的连接和应用程序之间的区别。我认为您还需要在xml中包含/databasename:3306之后。仍然是否定的:(问题是,我不知道root@localhost和root@%是用户。我以为root本身就是用户。所以我不知道他们的密码是否相同。我怎么知道呢?Asah非常感谢。我已经通过以下方法解决了这个问题:通过密码“PASSWORD”将用法授予。通过密码“PASSWORD”将用法授予“root@%”;命令。通过给出相同的密码password@Neron:完全正确!在MySQ中L唯一的用户是由用户名和主机定义的。因此
'root'@'%
实际上是与
'root'@'localhost'
不同的用户。FWIW:这完全是非传统的,我不知道有任何其他软件会这样做。对于使用MySQL的人来说,这是一个非常常见的混淆源。
getJdbcTemplate().queryForList(sql.toString());