Window中MySQL绕过密码登录的底层原理详解

 更新时间:2025年02月14日 10:48:03   作者:码农研究僧  
在 MySQL 中,root 用户的密码存储和认证机制随着版本的升级发生了变化,绕过密码登录主要依赖于 --skip-grant-tables 选项,本文将详细分析 MySQL 绕过密码的底层原理,并解释为什么某些操作在 --skip-grant-tables 模式下无效,以及如何正确生效修改

1. 基本知识

在 MySQL 中,root 用户的密码存储和认证机制随着版本的升级发生了变化
绕过密码登录主要依赖于 --skip-grant-tables 选项,但这一过程涉及 MySQL 的用户认证体系、权限管理以及数据库安全策略

本文将详细分析 MySQL 绕过密码的底层原理,并解释为什么某些操作在 --skip-grant-tables 模式下无效,以及如何正确生效修改

一、MySQL 用户认证机制

MySQL 的用户认证由以下几个核心组件组成:

mysql.user 表:存储用户信息,如 user、host、authentication_string(MySQL 5.7+)
身份验证插件(Authentication Plugin):MySQL 使用不同的插件来管理用户登录,例如:
mysql_native_password
caching_sha2_password(MySQL 8.0 默认)
sha256_password
权限系统(Privilege System):用于控制用户在数据库中的操作权限

当用户登录 MySQL 时,服务器会:

  1. 检查 mysql.user 表,确认用户名、主机匹配的账号是否存在
  2. 调用身份验证插件,使用 authentication_string 进行密码验证
  3. 检查权限系统,确定用户的访问权限

二、 --skip-grant-tables 绕过权限验证

--skip-grant-tables 选项允许 MySQL 启动时跳过权限系统,这意味着:
MySQL 不会检查用户权限,所有用户都可以直接访问数据库,由于 权限系统未启用,某些 SQL 语句(如 ALTER USER)可能无法执行,仍然需要 手动刷新权限(FLUSH PRIVILEGES;) 才能使修改生效
问题点:如果 FLUSH PRIVILEGES; 未执行,MySQL 仍然会使用旧的用户认证规则,导致密码修改后仍然无法登录

三、password() 函数被移除

在 MySQL 8.0 及以上版本中,password() 函数已被移除,所以UPDATE mysql.user SET password = PASSWORD('root') WHERE user = 'root';会导致 语法错误

正确方式(适用于 MySQL 5.7 及以上):

UPDATE mysql.user SET authentication_string = '' WHERE user = 'root' AND host = 'localhost';
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';

注意:
authentication_string 取代了 password 字段;ALTER USER 是修改密码的推荐方法

四、以管理员权限运行命令行

在 Windows 上,如果没有以管理员身份运行 cmd,则可能遇到权限问题,导致 ALTER USER 操作失败

五、 --skip-grant-tables 退出后密码失效的原因

如果在 --skip-grant-tables 模式下修改了密码,然后退出 MySQL 后密码仍然无效,可能的原因有:
没有执行 FLUSH PRIVILEGES;,导致修改未生效
MySQL 仍然使用缓存,未完全刷新认证信息
未使用 ALTER USER,仍然在 mysql.user 直接修改 authentication_string,但没有正确同步
MySQL 版本不同,认证机制发生变化,导致密码修改失败

解决方案:

  1. 确保 FLUSH PRIVILEGES; 执行成功。
  2. 直接使用 ALTER USER 而不是 UPDATE mysql.user。
  3. 重启 MySQL 以清除缓存

2. 实战Demo

以实战Demo进行演示

cmd窗口一定要管理员权限

cmd窗口一定要管理员权限

cmd窗口一定要管理员权限

开启跳过密码登录:mysqld --console --skip-grant-tables --shared-memory (此窗口勿关闭)

后续在另外一个窗口cmd管理员,输入如下:

直接登录,跳过密码:mysql -u root -p

链接数据库:USE mysql;

如果是 MySQL 5.7 及以上(包括 MySQL 8.0),请执行:

UPDATE mysql.user SET authentication_string = '' WHERE user = 'root' AND host = 'localhost';
FLUSH PRIVILEGES;

然后再执行:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';

注意:这里 authentication_string 字段在 MySQL 5.7 及以上版本中取代了 password 字段

别忘记刷新权限以及退出:

FLUSH PRIVILEGES;
quit;

总体截图如下:

先关闭 MySQL 服务器:net stop mysql

然后重新启动:net start mysql

重新登录 MySQL:mysql -u root -p

到此这篇关于Window中MySQL绕过密码登录的底层原理详解的文章就介绍到这了,更多相关MySQL绕过密码登录内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql之group by和having用法详解

    mysql之group by和having用法详解

    这篇文章主要介绍了mysql之group by和having用法详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • MySQL循环查询的实现示例

    MySQL循环查询的实现示例

    MySQL循环查询是指在MySQL数据库中使用循环结构进行数据查询的一种方法,本文主要介绍了MySQL循环查询的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • MySQL中on duplicate key update的使用方法实例

    MySQL中on duplicate key update的使用方法实例

    在做数据统计的时候,我们经常会用到mysql的on duplicate key update语法来自动更新数据,下面这篇文章主要给大家介绍了关于MySQL中on duplicate key update的使用方法的相关资料,需要的朋友可以参考下
    2022-09-09
  • MySQL表的基本查询详细图文教程

    MySQL表的基本查询详细图文教程

    这篇文章主要给大家介绍了关于MySQL表的基本查询的相关资料,需要的朋友可以参考下
    2024-10-10
  • SUSE Linux下源码编译方式安装MySQL 5.6过程分享

    SUSE Linux下源码编译方式安装MySQL 5.6过程分享

    这篇文章主要介绍了SUSE Linux下源码编译方式安装MySQL 5.6过程分享,本文使用SUSE Linux Enterprise Server 10 SP3 (x86_64)系统,需要的朋友可以参考下
    2014-09-09
  • MySQL 删除数据库中重复数据方法小结

    MySQL 删除数据库中重复数据方法小结

    在实际项目中,我们经常会遇到删除数据库中重复数据的问题,貌似是很简单的问题哈,下面我们来探讨下
    2014-07-07
  • MySQL 主主同步配置步骤

    MySQL 主主同步配置步骤

    创建同步用户、修改 /etc/my.cnf 配置文件,为其添加以下内容、分别重启服务器ODD EVEN 上的mysql服务
    2013-05-05
  • 一文带你彻底了解MySQL事务机制

    一文带你彻底了解MySQL事务机制

    一个事情由n个单元组成,这n个单元在执行过程中,要么同时成功,要么同时失败,这就把n个单元放在了一个事务之中,这篇文章主要给大家详细介绍MySQL的事务机制,感兴趣的同学欢迎阅读本文
    2023-06-06
  • MySQL 中  DATE_FORMAT() 函数的使用及应用场景

    MySQL 中  DATE_FORMAT() 函数的使用及应用场景

    DATE_FORMAT() 是 MySQL 中的一个内置函数,用于格式化日期和时间数据,它可以根据指定的格式字符串来展示日期和时间,使得数据更容易阅读和理解,本文档将详细介绍 DATE_FORMAT() 函数的使用方法及其常见应用场景,感兴趣的朋友一起看看吧
    2024-12-12
  • 详解MySQL性能优化(二)

    详解MySQL性能优化(二)

    本文对MySQL性能优化进行了详细的总结与介绍,需要的朋友可以参考下
    2015-08-08

最新评论