拒绝访问用户“root”@“localhost”(使用密码:yes)(mysql::error)

u59ebvdq  于 2021-06-20  发布在  Mysql
关注(0)|答案(14)|浏览(588)

我试图在我的服务器上部署web应用程序,我得到了这个mysql数据库异常 Access denied for user 'root'@'localhost' (using password: YES) (Mysql::Error) 我尝试使用命令提示符访问数据库 mysql -u root -p 我能做所有的数据库操作。
错误是什么

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)
hujrc8aj

hujrc8aj1#

在mysql数据库中更新用户表。在空白处设置一些密码,我使用的是root用户,所以我为root用户设置了密码。

update mysql.user set password = PASSWORD('123456') where password = '';
flush privileges;

然后再次尝试从atgcim提供密码,它工作得很好。

http://i.stack.imgur.com/3lchp.png

9rbhqvlz

9rbhqvlz2#

检查密码是否有空格。

v8wbuo2f

v8wbuo2f3#

更新mysql的mysql.user表中的空密码

use mysql;
select host,user,password from mysql.user;
update mysql.user set password = PASSWORD('123456') where password = '';
flush privileges;
vvppvyoh

vvppvyoh4#

如果在安装时没有设置密码,则会发生此错误,在本例中是使用unix套接字插件的mysql。
但如果从settings(表mysql.user)中删除插件链接,则会出现其他问题。这并不能解决问题,还会产生另一个问题。要修复已删除的链接并设置密码(“pwd”),请执行以下操作:
1) 运行--skip grant表,如上所述。
如果不起作用,那么在/etc/mysql/mysql.conf.d/mysqld.cnf的[mysqld]部分添加字符串skip grant表。然后重新启动sudo服务mysql。
2) 运行mysql-u root-p,然后(更改“pwd”):

update mysql.user 
    set authentication_string=PASSWORD("PWD"), plugin="mysql_native_password" 
    where User='root' and Host='localhost';    
flush privileges;

quit
then sudo service mysql restart. Check: mysql -u root -p.

在重新启动之前,如果在mysqld.cnf文件中设置了该字符串,请将其删除。
@bl79是这个答案的作者,我刚刚转载了它,因为它确实有帮助!

doinxwow

doinxwow5#

在将mysql服务器从5.1.73升级到5.5.45之后,我也遇到了同样的错误,还有另一种方法可以修复这个错误。
在我的例子中,我可以使用root密码连接到mysql,但是mysql主动拒绝向任何用户授予特权;
以根用户身份连接到mysql

mysql -u root -p

然后输入mysql root密码;
选择数据库;

use mysql;

很可能只有一个根目录记录 mysql.user 只允许从连接的表 localhost (在我的例子中是这样的)但是默认情况下,root应该有两个记录,一个是 localhost 再来一个给你 127.0.0.1 ;
为根用户创建附加记录 Host='127.0.0.1' 如果它不在那里;

SET @s = CONCAT('INSERT INTO mysql.user SELECT ',
            REPLACE((SELECT GROUP_CONCAT(COLUMN_NAME) 
                     FROM INFORMATION_SCHEMA.COLUMNS
                     WHERE TABLE_NAME = 'user' AND TABLE_SCHEMA = 'mysql')
            ,"Host","'127.0.0.1'"),
            ' FROM mysql.user WHERE User="root"'); 

     PREPARE stmt FROM @s; 
     EXECUTE stmt;

除此之外,您还可以执行 mysql_upgrade -u -p 看看是否一切正常。

zphenhs4

zphenhs46#

您需要从localhost授予对root的访问权。查看此ubuntu帮助

46scxncf

46scxncf7#

在msyql中添加用户选项。

GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION;

这个链接会很有用。

ibrsph3r

ibrsph3r8#

我在谷歌上搜索了很多,但没有找到我的问题的确切答案。我使用keypass生成了一个强密码,可以在mysql工作台上成功地使用它进行连接,但不能从命令行使用。所以我把psw改成了一个简单的命令行。我已经设法创建了一个强大的密码,能够从终端连接。所以我的建议是,在尝试所有的事情之前,先尝试一个简单的密码。

wztqucjr

wztqucjr9#

我今天在安装sugarcrm(一个免费的crm)时遇到了这个问题。
系统无法使用根用户连接到数据库。我可以从控制台以root身份登录。。。那么问题出在哪里?
我发现在我的情况下,我得到了完全相同的错误,但那是因为密码是直接从 $_POST 换句话说,数据 < 我的密码中的字符作为 &lt; 也就是说密码错了。
其他一切都毫无帮助。mysql中的用户列表是正确的,包括匿名用户(出现在根条目之后)

v6ylcynt

v6ylcynt10#

我正在运行uts,开始收到错误消息。我不确定是什么问题。但是当我把intellij中的编码风格改为utf8时,它又开始工作了。
拒绝访问用户“root”@“localhost”(使用密码“是”)hibernate
这是我的url db.url=jdbc:mysql://localhost:3306/somedb?useunicode=true&connectioncollation=utf8_general_ci&charactersetresults=utf8&characterencoding=utf8

e37o9pze

e37o9pze11#

我通过删除mysql创建的空用户来解决这个问题。我只有根用户和我自己的用户。我把剩下的删掉了。

wbrvyc0a

wbrvyc0a12#

从我的回答来看,我认为这可能有用:
我尝试了许多步骤来纠正这个问题。对于这个问题,有太多可能的解决办法,很难从这些无稽之谈中剔除其意义。我终于在这里找到了一个好办法:
步骤1:识别数据库版本

$ mysql --version

在mysql中,您将看到如下输出:

$ mysql  Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using  EditLine wrapper

或输出如下:

mysql  Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1

记下正在运行的数据库和版本,以便以后使用。接下来,您需要停止数据库,以便手动访问它。
步骤2:停止数据库服务器
要更改根密码,必须事先关闭数据库服务器。
对于mysql,您可以使用:

$ sudo systemctl stop mysql

对于mariadb来说:

$ sudo systemctl stop mariadb

步骤3:在没有权限检查的情况下重新启动数据库服务器
如果您运行mysql和mariadb而不加载有关用户权限的信息,它将允许您使用root权限访问数据库命令行,而不提供密码。这将允许您在不知情的情况下访问数据库。
为此,需要停止数据库加载grant表,这些表存储用户权限信息。因为这有点安全风险,所以您也应该跳过网络,以防止其他客户端连接。
在不加载授权表或启用网络的情况下启动数据库:

$ sudo mysqld_safe --skip-grant-tables --skip-networking &

此命令末尾的符号将使此进程在后台运行,以便您可以继续使用终端。
现在您可以以root用户身份连接到数据库,而root用户不应要求输入密码。

$ mysql -u root

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

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

mysql>

mariadb提示

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

MariaDB [(none)]>

现在您有了根访问权限,可以更改根密码了。
第4步:更改根密码

mysql> FLUSH PRIVILEGES;

现在我们可以更改根密码了。
对于MySQL5.7.6和更新版本以及Mariadb10.1.20和更新版本,请使用以下命令:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

对于mysql 5.7.5及更高版本以及mariadb 10.1.20及更高版本,请使用:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');

一定要更换 new_password 使用您选择的新密码。
注:如果 ALTER USER 命令不起作用,它通常意味着一个更大的问题。不过,你可以试试 UPDATE ... SET 重置根密码。
[重要提示]这是解决我的特定问题的具体路线:

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

记住在此之后重新加载grant表。
无论哪种情况,您都应该看到命令已成功执行的确认。

Query OK, 0 rows affected (0.00 sec)

密码已更改,因此现在可以停止数据库服务器的手动示例,并像以前一样重新启动它。
第五步:正常重启数据库服务器
本教程进一步介绍了重新启动数据库的步骤,但我使用的唯一一个步骤是:
对于mysql,使用:$sudo systemctl start mysql
对于mariadb,使用:

$ sudo systemctl start mariadb

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

$ mysql -u root -p

命令现在应该提示输入新分配的密码。输入它,您应该可以按预期访问数据库提示符。
结论
现在您可以对mysql或mariadb服务器进行管理访问。确保您选择的新根密码是强大和安全的,并将其保存在安全的地方。

vwoqyblh

vwoqyblh13#

我的应用程序使用的是mura-cms,我面临这个问题。但是,解决方案是mysql本地服务器和配置文件中的密码不匹配。我一同步就成功了。

dffbzjpn

dffbzjpn14#

尝试使用 root 就像。。

mysql -uroot

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

select user,host,password from mysql.user;

相关问题