我正在尝试连接到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>
并且在db中,user_priviliges表是:
'root'@'%', 'def', 'USAGE', 'NO'
请帮我解决这个问题?
编辑:
我正在使用jdbcTemplate,错误就在这一行:
getJdbcTemplate().queryForList(sql.toString());
答案 0 :(得分:1)
除了您已拥有的'root'@'localhost'
帐户(使用相同的密码)之外,您还需要为'root'@'%'
创建一个帐户。为什么?请参阅mysql docs on this subject。以下是相关部分:
其中两个帐户的用户名为monty,密码为some_pass。这两个帐户都是具有完全权限的超级用户帐户。 &#39; monty&#39; @&#39; localhost&#39;帐户只能在从本地主机连接时使用。 &#39; monty&#39; @&#39;%&#39;帐户使用&#39;%&#39;主机部分的通配符,因此可用于从任何主机连接。
有必要让monty的两个帐户都可以作为monty从任何地方连接。如果没有localhost帐户,当monty从本地主机连接时,mysql_install_db创建的localhost的匿名用户帐户将优先。因此,monty将被视为匿名用户。这样做的原因是,匿名用户帐户的主机列值比“monty&#39; @&#39;%&#39;帐户因此在用户表排序顺序中更早出现。 (用户表排序将在第6.2.4节“访问控制,第1阶段:连接验证”中讨论。)