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

Posted

技术标签:

【中文标题】用户\'root\'@\'localhost\'的访问被拒绝(使用密码:YES)【英文标题】:Access denied for User 'root'@'localhost' (using password: YES )用户'root'@'localhost'的访问被拒绝(使用密码:YES) 【发布时间】:2013-05-07 13:29:20 【问题描述】:

我想连接我的本地 mysql 数据库,该数据库与 XAMP 服务器一起安装。我创建了一个新用户,即“NewUser”,其密码为“password”。我已将所有 PRIVILEGES 授予该用户。

我编写代码以使用用户“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”。

如果我在这里取得成功,那么我将成功连接到客户端实时数据库..

谢谢大家,请让我离开这个.....

【问题讨论】:

你可以使用mysql -u NewUser -h localhost -p从控制台连接吗? 【参考方案1】:

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

基于Mysql版本,请尝试不指定任意主机(%)作为基于Mysql documentation的替代设置权限,

简单形式 user_name 是 user_name@'%' 的同义词

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

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

【讨论】:

【参考方案2】:
    您的 URL 必须全部小写 -- `jdbc:MySql://localhost/database_name" 你的数据库真的叫database_name吗?

【讨论】:

他说连接字符串适用于root,那么为什么其他用户会出现问题? 是的,我给的数据库名称是“database_name”,并且 url 是正确的。如果它错了,那么它在第一种情况下也会失败,但不是...... 用户是否是created in mysql 并且所说的用户是have permissions to access database_name on localhost? “NewUser”对数据库“database_name”有权限吗? 是的,“NewUser”拥有这个“database_name”数据库@Sharky的所有权限【参考方案3】:

请试试这个语法

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 刷新特权;

【讨论】:

谢谢,但它仍然产生相同的错误......作为“用户访问被拒绝”@ Sharky【参考方案4】:

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

更多详情请参考MySQL documentation

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

monty 必须同时拥有两个帐户才能连接 从任何地方都可以。如果没有 localhost 帐户,则 由 localhost 创建的匿名用户帐户 当 monty 从 本地主机。因此,monty 将被视为匿名用户。 原因是匿名用户帐户具有更多 特定的主机列值比 'monty'@'%' 帐户,因此来 较早的用户表排序顺序。 (讨论用户表排序 在第 6.2.4 节,“访问控制,第 1 阶段:连接验证”中。)

【讨论】:

【参考方案5】:

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

【讨论】:

以上是关于用户'root'@'localhost'的访问被拒绝(使用密码:YES)的主要内容,如果未能解决你的问题,请参考以下文章

错误 1698 (28000): 拒绝用户 'root'@'localhost' 的访问

用户'root'@'localhost'的MYSQL访问被拒绝

用户 'root'@'localhost' 的访问被拒绝

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

#1045 - 用户 'root'@'localhost' 的访问被拒绝(使用密码:否)

使用密码拒绝用户'root'@'localhost'的访问:否