访问被拒绝的用户“根” @“localhost”的(使用密码:YES)(Access denied

2019-09-02 21:38发布

我想用我的本地MySQL数据库,它与XAMP服务器一起安装连接。 我创建了一个新的用户,即,“NEWUSER”,密码为“密码”。 我给所有的权限给该用户。

我写的代码,通过使用用户的“根”(没有密码此用户)与数据的基础上进行连接。 它的连接。 像波纹管..

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

现在我写的代码由另一个用户即“NEWUSER”及其pasword“密码”与同一数据库连接

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)

我给主机类型,同时提供特权给该用户,因为“任何主机”,即“%”。

如果我改变了为“localhost”或“127.0.0.1”的工作。

所以,我怎么可以用我的“ANYHOST”特权数据库备份到“NEWUSER”特定用户。

如果我在连接到客户端实时数据的基础上得到了成功的这里,那么我成功..

感谢大家,请让我从此一发不可收拾.....

Answer 1:

由于第一个指定的代码工作,并根据报告的痕迹,我敢肯定问题是数据库,而不是代码语法上。

基于MySQL的版本,请尝试为设置权限不指定任何主机(%)为基础的替代MySQL文档 ,

简单形式user_name是user_name的代名词@“%”

此外flush privileges的使用后立即FLUSH PRIVILEGES;

只是,以确保一切是正确的,也是运行SHOW GRANTS FOR NewUser; 并检查是否出现NEWUSER与相应的权限列表。



Answer 2:

  1. 您的网址,就是要全部小写 - `JDBC的:mysql://本地主机/数据库名称”
  2. 是数据库真的叫数据库名称?


Answer 3:

请试试这个语法

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

(只需更换密码的地方说:“your_password_here”)

编辑 - 第二次猜测:可能你已经通过阻断192.168.xx的范围防火墙自己。

我假设你运行Windows。 打开命令提示符下,键入“IPCONFIG”按回车键。 看到你的IPv4 ADRESS(应该是这样的192.168.1.X)

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

如果这不起作用,关闭所有的防火墙/防毒,然后再试一次。

也可以尝试通过重新加载任何特权:

  • 重启XAMPP
  • FLUSH PRIVILEGES;


Answer 4:

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

有关详细信息,请参阅MySQL文档

其中两个账户有蒙蒂的用户名和密码some_pass。 两个账户均为超级用户账户,具有完全的权限做任何事情。 “localhost”的帐户“蒙蒂” @只能从本地主机连接时使用。 在“蒙蒂” @“%”账户使用的主机部分的“%”通配符,因此它可以被用于从任何主机连接。

它必须有两个帐户的蒙蒂能够从任何地点连接的蒙蒂。 没有localhost账户,当蒙蒂从本地主机连接的是mysql_install_db创建localhost的匿名用户账户将占先。 其结果是,monty将被视为匿名用户。 这样做的原因是匿名用户账户的比“壮士”更具体的Host列值@“%”账户,从而较早进来的用户表排列顺序。 (用户表排序在第6.2.4节,“访问控制,阶段1:连接核实”中讨论。)



Answer 5:

GO用户/权限/编辑特权/更改密码,或者选择没有密码更新休眠配置文件中的密码并重新启动服务器。



文章来源: Access denied for User 'root'@'localhost' (using password: YES )