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

Jee*_*gre 34 java mysql ubuntu

我试图在我的服务器上部署Web应用程序,我得到这个mysql数据库异常"访问被拒绝用户'root'@'localhost'(使用密码:YES)(Mysql :: Error)"

我尝试从命令提示符访问数据库,Access denied for user 'root'@'localhost' (using password: YES) (Mysql::Error)我可以执行所有数据库操作.

什么是错误

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2928)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:771)
    at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3649)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1176)
    at com.mysql.jdbc.Connection.createNewIO(Connection.java:2558)
    at com.mysql.jdbc.Connection.<init>(Connection.java:1485)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
    at java.sql.DriverManager.getConnection(DriverManager.java:620)
    at java.sql.DriverManager.getConnection(DriverManager.java:200)
    at com.mpigeon.DbConnection.DbConn(DbConnection.java:26)
    at com.mpigeon.CheckLoginHome.doGet(CheckLoginHome.java:39)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
Run Code Online (Sandbox Code Playgroud)

Jig*_*shi 23

您需要从localhost授予对root用户的访问权限.检查这个 ubuntu帮助

  • 请发布答案本身,而不是链接(可能会消失). (16认同)
  • Yakshemash!如果它发生在Windows 7,64位中,我该怎么做? (6认同)

Viv*_*dev 9

试着用root...

mysql -uroot
Run Code Online (Sandbox Code Playgroud)

然后,您可以在使用后登录后检查不同的用户和主机

select user,host,password from mysql.user;
Run Code Online (Sandbox Code Playgroud)


KhA*_*aAb 6

检查你是否在密码中留空格.


Bla*_*g23 6

从我在这里的回答来看,我认为这可能有用:

我尝试了很多步骤来解决这个问题。这个问题的可能解决方案有很多来源,很难从废话中剔除有意义的内容。我终于在这里找到了一个很好的解决方案:

第 1 步:识别数据库版本

$ mysql --version
Run Code Online (Sandbox Code Playgroud)

您将在 MySQL 中看到类似这样的输出:

$ mysql  Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using  EditLine wrapper
Run Code Online (Sandbox Code Playgroud)

或者对于 MariaDB 输出如下:

mysql  Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1
Run Code Online (Sandbox Code Playgroud)

记下您正在运行的数据库和版本,稍后您将使用它们。接下来,您需要停止数据库,以便可以手动访问它。

步骤 2:停止数据库服务器

要更改root密码,您必须事先关闭数据库服务器。

您可以使用以下命令对 MySQL 执行此操作:

$ sudo systemctl stop mysql
Run Code Online (Sandbox Code Playgroud)

对于 MariaDB 来说:

$ sudo systemctl stop mariadb
Run Code Online (Sandbox Code Playgroud)

第三步:不检查权限重启数据库服务器

如果您在不加载有关用户权限的信息的情况下运行 MySQL 和 MariaDB,它将允许您以 root 权限访问数据库命令行,而无需提供密码。这将允许您在不知情的情况下访问数据库。

为此,您需要阻止数据库加载存储用户权限信息的授权表。因为这存在一点安全风险,所以您还应该跳过网络以防止其他客户端连接。

启动数据库而不加载授权表或启用网络:

$ sudo mysqld_safe --skip-grant-tables --skip-networking &
Run Code Online (Sandbox Code Playgroud)

该命令末尾的&符号将使该进程在后台运行,以便您可以继续使用终端。

现在您可以以 root 用户身份连接到数据库,这不会要求输入密码。

$ mysql -u root
Run Code Online (Sandbox Code Playgroud)

您将立即看到数据库 shell 提示符。

MySQL提示符

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
Run Code Online (Sandbox Code Playgroud)

MariaDB 提示

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>
Run Code Online (Sandbox Code Playgroud)

现在您已拥有 root 访问权限,您可以更改 root 密码。

步骤 4:更改 root 密码

mysql> FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

现在我们实际上可以更改root密码了。

对于MySQL 5.7.6 及更高版本以及MariaDB 10.1.20 及更高版本,请使用以下命令:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
Run Code Online (Sandbox Code Playgroud)

对于MySQL 5.7.5 及更早版本以及MariaDB 10.1.20 及更早版本,请使用:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
Run Code Online (Sandbox Code Playgroud)

确保替换new_password为您选择的新密码。

注意:如果该ALTER USER命令不起作用,通常表明存在更大的问题。不过,您可以尝试UPDATE ... SET重置 root 密码。

[重要] 这是解决我的特定问题的特定行:

mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';
Run Code Online (Sandbox Code Playgroud)

请记住在此之后重新加载授权表。

无论哪种情况,您都应该看到命令已成功执行的确认信息。

Query OK, 0 rows affected (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

密码已更改,因此您现在可以停止数据库服务器的手动实例并像以前一样重新启动它。

步骤5:正常重启数据库服务器

本教程进一步介绍了重新启动数据库的一些步骤,但我使用的唯一部分是:

对于 MySQL,请使用: $ sudo systemctl start mysql

对于 MariaDB,请使用:

$ sudo systemctl start mariadb
Run Code Online (Sandbox Code Playgroud)

现在您可以通过运行以下命令来确认新密码已正确应用:

$ mysql -u root -p
Run Code Online (Sandbox Code Playgroud)

该命令现在应该提示输入新分配的密码。输入它,您应该可以按预期访问数据库提示符。

结论

您现在可以恢复对 MySQL 或 MariaDB 服务器的管理访问权限。确保您选择的新 root 密码强大且安全,并将其保存在安全的地方。