用户'root'@'localhost'拒绝访问(使用密码:YES)

时间:2013-05-13 13:30:24

标签: java mysql jdbc mysql-connector

我想连接我的本地MYSQL数据库,它与XAMP服务器一起安装。我创建了一个新用户,即“NewUser”,其密码为“password”。我给了这个用户所有的特权。

我使用用户“root”编写了与数据库连接的代码(此用户没有密码)。 它的连接。喜欢吼叫..

return DriverManager.getConnection("jdbc:MySql://localhost/database_name","root","");

现在我编写了代码以便由另一个用户连接相同的数据库,即“NewUser”及其密码“password”

return DriverManager.getConnection("jdbc:MySql://localhost/database_name","NewUser","password");

但它没有连接。 控制台中的错误是

java.sql.SQLException: Access denied for user 'NewUser'@'localhost' (using password: YES)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4120)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:925)
    at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1704)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1250)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2465)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2498)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2283)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:822)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at sun.reflect.GeneratedConstructorAccessor207.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:404)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:317)
    at org.eclipse.datatools.connectivity.drivers.jdbc.JDBCConnection.createConnection(JDBCConnection.java:214)
    at org.eclipse.datatools.connectivity.DriverConnectionBase.internalCreateConnection(DriverConnectionBase.java:105)
    at org.eclipse.datatools.connectivity.DriverConnectionBase.open(DriverConnectionBase.java:54)
    at org.eclipse.datatools.connectivity.drivers.jdbc.JDBCConnection.open(JDBCConnection.java:73)
    at org.eclipse.datatools.enablement.internal.mysql.connection.JDBCMySQLConnectionFactory.createConnection(JDBCMySQLConnectionFactory.java:28)
    at org.eclipse.datatools.connectivity.internal.ConnectionFactoryProvider.createConnection(ConnectionFactoryProvider.java:83)
    at org.eclipse.datatools.connectivity.internal.ConnectionProfile.createConnection(ConnectionProfile.java:359)
    at org.eclipse.datatools.connectivity.ui.PingJob.createTestConnection(PingJob.java:76)
    at org.eclipse.datatools.connectivity.ui.PingJob.run(PingJob.java:59)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)

我在向这个用户提供PRIVILEGES时给出主机类型,称为“任何主机”,即“%”。

如果我将其更改为“localhost”或“127.0.0.1”,则可以正常工作。

那么如何将我的数据库与“anyhost”特权用于“NewUser”这样的特定用户。

如果我在这里取得成功,那么我就成功地与客户实时数据库相关联。

感谢所有人,请让我从这一个出来......

5 个答案:

答案 0 :(得分:1)

由于第一个指定的代码工作并且也基于报告的跟踪,我很确定问题出在数据库上,而不是代码语法。

根据Mysql版本,请尝试替代设置权限,而不指定基于Mysql documentation的任何主机(%),

  

简单形式user_name是user_name @'%'

的同义词

使用FLUSH PRIVILEGES;

后立即刷新权限

只是为了确保一切正确,同时运行一个 SHOW GRANTS FOR NewUser;并检查NewUser是否出现在具有相应权限的列表中。

答案 1 :(得分:0)

  1. 您的网址应全部小写 - “jdbc:MySql:// localhost / database_name”
  2. 您的数据库真的名为database_name吗?

答案 2 :(得分:0)

请尝试使用此语法

return DriverManager.getConnection("jdbc:mysql://localhost/database_name?user=NewUser&password=your_password_here");

(只需将密码替换为“your_password_here”)

编辑 - 第二个问题: 您可以通过阻止192.168.x.x范围来防火墙。

我假设您正在运行Windows。打开命令提示符,输入“ipconfig”按回车键。看你的ipv4地址(应该是类似192.168.1.x)

确保您的防病毒/防火墙程序允许从192.168.1.x(这是您自己)连接,然后尝试使用它而不是“%”或“localhost”

如果这不起作用,请关闭所有防火墙/防病毒软件,然后重试。

还可以尝试通过以下方式重新加载权限:

  • 重新启动xampp
  • FLUSH PRIVILEGES;

答案 3 :(得分:0)

为了让用户能够访问您的数据库,您需要指定一个允许他们连接的主机。 但请注意:即使您使用通配符(%)作为主机名,用户也无法从localhost连接。他们可以从任何主机连接,但不能从localhost连接。 从localhost连接时,我假设你的mysql安装假定你是一个匿名用户。 为了允许用户从localhost连接,您需要在主机字段中添加一个单独的“localhost”用户。

有关详细信息,请参阅MySQL documentation

  

其中两个帐户的用户名为monty,密码为   some_pass。两个帐户都是具有完全权限的超级用户帐户   做任何事。 'monty'@'localhost'帐户只能在以下情况下使用   从本地主机连接。 'monty'@'%'帐号使用'%'   主机部分的通配符,因此可以用于从任何连接   主机。

     

有两个帐户的monty能够连接   从任何地方都像蒙蒂。没有localhost帐户,   由[创建]创建的localhost的匿名用户帐户   当monty连接时,mysql_install_db优先   当地主持人。因此,monty将被视为匿名用户。   原因是匿名用户帐户有更多   特定主机列值比'monty'@'%'帐户因此而来   早期的用户表排序顺序。 (讨论用户表排序   在第6.2.4节“访问控制,第1阶段:连接验证”中。)

答案 4 :(得分:0)

转到用户/权限/编辑权限/ 更改密码或选择无密码 更新hibernate配置文件中的密码,然后重启服务器。