服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - 全面分析MySQL ERROR 1045出现的原因及解决

全面分析MySQL ERROR 1045出现的原因及解决

2022-07-13 20:13xieet_0 Mysql

这篇文章主要介绍了全面分析MySQL ERROR 1045出现的原因及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

在命令行输入mysql -u root –p,输入密码,或通过工具连接数据库时,经常出现下面的错误信息,相信该错误信息很多人在使用MySQL时都遇到过。

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)  

通常从网上都能找到解决方案

1.停止服务

停止MySQL服务;

 # windows
 net stop mysql 
 # linux
 service mysqld stop

2.跳过验证

修改MySQL安装目录下的my.ini配置文件,使登录时跳过权限检查;

 #到mysql根目录找到mysql配置文件 
 vim my.ini
 #在my.ini,[mysqld]下添加一行,使其登录时跳过权限检查
 skip_grant_tables

3.修改密码

启动MySQL服务,登录MySQL,此时提示输入密码,输入任意密码回车即可进入MySQL。

#登录mysql
mysql -u root -p

然后通过SQL语句修改root用户的密码;

#将数据库切换至mysql库
mysql> USE mysql;
#修改密码
mysql> UPDATE user SET password=PASSWORD(‘newpasswd")WHERE user="root"; 
#刷新MySQL权限相关的表
mysql> flush privileges;
mysql> exit;

4.重启服务

将my.ini文件中加入的跳过权限语句删除或加#号注释。

重启服务,使用修改后的密码登录即可。

原因分析

使用root用户登录MySQL,查看user表中的用户信息如下,可以发现host的字段分别为%和localhost。

mysql>select host,user,password from user;

全面分析MySQL ERROR 1045出现的原因及解决

在MySQL中’%'表示可以在任何主机上登录MySQL数据库,那为什么还需要明确创建登录主机为localhost的用户呢?

这涉及到MySQL安装时的初始化用户,匿名用户以及连接验证策略等

下面进行深入的分析。

在安装MySQL时,会默认初始化一些用户,比如root用户,以及host字段为localhost,user字段为空的用户。

User字段为空的用户即为匿名用户,该用户的密码也为空,任何人都可以使用匿名用户登录MySQL数据库,但可以做的事情却是有限的,比如在命令行直接输入mysql登录,可以查看匿名用户对哪些数据库有权限:

mysql>select current_user;

全面分析MySQL ERROR 1045出现的原因及解决

mysql>show databases;

全面分析MySQL ERROR 1045出现的原因及解决

通过上面的图片可以发现,匿名用户仅对information_schema和test数据库有权限。

而匿名用户又是如何影响其他用户登录,进而出现28000错误的呢?

当试图连接MySQL数据库时,数据库根据提供的身份和密码决定是否接受连接请求,身份由两部分组成:用户名和客户端主机(即输入mysql命令的主机)。

由于host字段中的%匹配任何主机或者host字段包含通配符,就可能出现多个匹配行,服务器必须决定匹配哪一个,服务器将user表中的数据读入内存中,按照host和user字段对行进行排序。

mysql>select host,user,password from user order by host desc,user desc;

全面分析MySQL ERROR 1045出现的原因及解决

当客户端试图连接时,服务器查找已排序的行并使用第一个匹配客户端主机和用户名的行,找到匹配行后,在验证密码是否一致,如果一致则登录成功。

user字段为空则表示可以匹配任何用户。

此处关注:

user为空,即任意用户,不使用密码登录localhost时,匿名用户仅对information_schema和test数据库有权限,使用其他数据库时,导致失败。

全面分析MySQL ERROR 1045出现的原因及解决

如果user为root,密码显示为空,或host字段显示为非’%'的时候,按照默认的匹配顺序,或者提示密码错误或者提示为ERROR 1045。

下图已修改完善,仅作参考,比如第一序列中,host为localhost或127回环地址的情况下,则会发生1045错误。

全面分析MySQL ERROR 1045出现的原因及解决

SO 解决办法

mysql> select host,user,password from user order by host desc,user desc;
## 将排序序列中最前面的用户修改host为"%"
mysql> update user set host = "%" where host = "oracle" and user = "root";
mysql> flush privileges;

全面分析MySQL ERROR 1045出现的原因及解决

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文地址:https://blog.csdn.net/qq_28938933/article/details/72872064

延伸 · 阅读

精彩推荐
  • MysqlMySql的优化步骤介绍(推荐)

    MySql的优化步骤介绍(推荐)

    下面小编就为大家带来一篇MySql的优化步骤介绍(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    jingxian5452020-06-14
  • Mysql详解mysql解压缩版安装步骤

    详解mysql解压缩版安装步骤

    这篇文章主要介绍了mysql解压缩版安装步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着...

    王王王王字倒着写4572020-09-21
  • MysqlMySQL: mysql is not running but lock exists 的解决方法

    MySQL: mysql is not running but lock exists 的解决方法

    下面可以参考下面的方法步骤解决。最后查到一个网友说可能和log文件有关,于是将log文件给移除了,再重启MySQL终于OK了 ...

    mysql教程网8722019-10-30
  • MysqlMySQL中EXPLAIN命令详解

    MySQL中EXPLAIN命令详解

    在这里我们将介绍的是MySQL中EXPLAIN解释命令,希望对大家有所帮助 ...

    MYSQL教程网2582020-04-19
  • Mysqlmysql5.7.19 zip 详细安装过程和配置

    mysql5.7.19 zip 详细安装过程和配置

    本文详细给大家介绍了mysql5.7.19 zip 详细安装过程和配置,感兴趣的朋友一起看看吧 ...

    刘镇平5412020-08-15
  • Mysql再有人问你MySQL索引原理,就把这篇文章甩给他!

    再有人问你MySQL索引原理,就把这篇文章甩给他!

    索引,可能让好很多人望而生畏,毕竟每次面试时候 MySQL 的索引一定是必问内容,哪怕先撇开面试,就在平常的开发中,对于 SQL 的优化也而是重中之重。...

    Hollis11842021-02-22
  • Mysql什么情况下需要创建MySQL索引?

    什么情况下需要创建MySQL索引?

    这篇文章主要介绍了什么情况下需要创建MySQL索引?本文同时介绍了哪些情况不适合创建MySQL索引,需要的朋友可以参考下 ...

    yuxikuo_15552020-04-22
  • MysqlSQL查询语句优化的实用方法总结

    SQL查询语句优化的实用方法总结

    下面小编就为大家带来一篇SQL查询语句优化的实用方法总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    数据库之家3272020-07-05