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

我想连接我的本地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.(ConnectionImpl.java:822) at com.mysql.jdbc.JDBC4Connection.(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”。

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

谢谢大家,请让我从这一个……

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

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

user_name的简单forms是user_name @’%’的同义词

使用FLUSH PRIVILEGES;后立即刷新权限FLUSH PRIVILEGES;

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

  1. 你的URL应全部小写 – “jdbc:MySql:// localhost / database_name”
  2. 您的数据库真的称为database_name吗?

请尝试这种语法

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

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

EDIT – SECOND GUESS:你可能通过阻止192.168.xx范围来防火墙。

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

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

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

同时尝试通过以下方式重新加载权限

  • 重启xampp
  • 冲洗特权;

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

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

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

有必要让monty帐户能够从任何地方连接为monty。 如果没有localhost帐户,当monty从本地主机连接时,mysql_install_db创建的localhost的匿名用户帐户将优先。 因此,monty将被视为匿名用户。 这样做的原因是匿名用户帐户具有比’monty’@’%’帐户更具体的主机列值,因此在用户表排序顺序中更早出现。 (用户表排序将在第6.2.4节“访问控制,第1阶段:连接validation”中讨论。)

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