缘由:最近北京市二环内大兴土木,各种挖沟埋线。忽而一纸通令周末断电,故多年不断电的服务器,便令人有了关机后是否还能正常启动的隐忧。其中一台较年迈的服务器中搭载有MySQL数据库。数据库内容本属于外包项目不需要多操心,但时至于此,为了数据安全备份一下,顺便查看下数据库的结构什么的,也在情理之中。但无奈的是,部署时间过于久远,无人清楚root的密码,由此引发的一系列思考和操作,便记录于此。

MySQL数据结构

MySQL在安装的时候会默认构建一个叫mysql的数据库,其中有名为user的表,其中主要定义了访问数据库的用户名密码以及CURD权限等。在访问MySQL的时候,会默认到user表里验证当前用户的信息是否匹配。

在首次安装MySQL的时候,默认会产生一个root用户,密码为空。权限固然是最大的,什么都能改,当然也是非常不安全的。所以一般安装之处都会给root设定一个密码。

Table user

Host User Password
localhost root *23AE809DDACAF96AF0FD78ED04B6A265E05AA257
% root *23AE809DDACAF96AF0FD78ED04B6A265E05AA257

从表获取的*23AE809DDACAF96AF0FD78ED04B6A265E05AA257便是root用户的密码,只不过这是加密之后的,也就是说,直接输入这么一长串字符串,是不正确的。于是乎出现了下面的疑问:

  • 在不知道密码的前提下,有方法知道root的密码么?
  • 在不知道密码的前提下,有方法访问数据库么?

MySQL加密方式

想要了解提出的疑问,首先还是先了解下MySQL的密文是怎么来的。
MySQL内置有PASSWORD()函数,目的就是将明文转换为密文,于是简单做了个实验。

1SELECT PASSWORD('123')

结果:*23AE809DDACAF96AF0FD78ED04B6A265E05AA257

说明明文123对应的密文就是这串带*的字符串。(所以我就很Lucky的知道了root的密码
但这依旧不能解决疑问,还是要从原理入手,于是查到了MySQL的加密算法SHA-1百度百科-SHA-1算法)。

算法过程这里不涉及,但是需要了解的是SHA-1加密算法有如下特性

  • 不可以从消息摘要中复原信息
  • 两个不同的消息不会产生同样的消息摘要

简而言之,即使知道了密文,也没有办法通过算法的方式获取明文。
这简直就是直接断了后路…
可事实是Google在2017年时就已经宣布成功攻破SHA-1加密算法,只不过破解它需要的造价不是我等穷苦大众所能接受的。

现在网上也有很多的在线加密解密的工具,例如在线加密解密。但绝大部分在散列/哈希算法领域,也仅提供加密不提供解密。
所以结论依旧是,没办法!

退而求其次,终归是有办法让我们访问自己服务器上的数据库内容的吧?

无密码MySQL访问方法

  1. cmd中的mysql\bin文件夹下执行下面语句,用于跳过用户验证访问数据库。
    当然,如果本机有正在运行的mysql的服务需要先停掉。
1mysql\bin>mysqld --skip-grant-tables
  1. 然后打开另外一个cmd,同样在mysql\bin文件夹下执行mysql访问数据库。
1mysql\bin>mysql
  1. 访问名为mysql的数据库。
1mysql>use mysql;
2database changed
  1. 查询user表中已有的用户(可以省略)。
1mysql>SELECT Host,User,Password FROM User;
  1. 如果要更改现有用户的密码,例如root@localhost
1mysql>UPDATE user SET Password=PASSWORD('123') WHERE User='root' AND Host='localhost';
  1. 现有的用户可能正在被某些应用使用,这种情况下可以只增加一个新的用户用于查看数据。
1mysql>INSERT INTO user (Host,User,Password) VALUES ('localhost','NewUser',PASSWORD('123'));

至此我们便有一个已知密码的用户,可以正常通过用户名密码访问数据库了。


扩展

SHA-1破解
常用加密方式AESDESSHA-256MD5BASE64

有兴趣的请自行扩展咯

MySQL的Root用户密码的更多相关文章

  1. MySQL重置root用户密码的方法

    本教程适用于采用Win2003.WinXP操作系统的迅美VPS和云主机产品. 当管理员忘记MySQL密码怎么办?屡次输入密码,仍然提示错误,网站无法正常运行,数据库也无法管理,管理员束手无策. 网站程 ...

  2. MySQL重置root用户密码的方法(转)

    本教程适用于采用Win2003.WinXP操作系统的迅美VPS和云主机产品. 当管理员忘记MySQL密码怎么办?屡次输入密码,仍然提示错误,网站无法正常运行,数据库也无法管理,管理员束手无策. 网站程 ...

  3. 第三篇 ubuntu下,mysql 的root用户密码忘了怎么办?

    好长一段时间没有使用ubuntu了,今天进来玩玩,结果连mysql的root用户密码都忘记了.就上网找了一下,发现如下解决办法,试了一下,可行!记录在此,环境问题,是需要注意的. Ubuntu Ser ...

  4. 忘记Mysql的root用户密码处理方法(以mysql 5.5.33为例)

    1.修改mysql服务器的脚本 ~]#vi /etc/rc.d/init.d/mysqld #找到$bindir/mysqld_safe --datadir="$datadir" ...

  5. mac 安装mysql + 修改root用户密码 + 及报Access denied for user 'root'@'localhost' (using password:YES)解决办法

    1.下载MySQL 到mysql的官网http://dev.mysql.com/downloads/mysql/然后在页面中会看到“MySQL Community Server”下方有一个“downl ...

  6. mysql修改root用户密码

    自我总结,欢迎拍砖! 目的:若root用户密码忘记,则需要重新设置root用户的密码. 步骤: 1.找到mysql安装目录下的 my.ini 文件,找到[mysqlId]一行,在下方添加语句:skip ...

  7. mysql(root用户密码设置)

    root密码重置 修改root用户的密码: /*登录mysql*/ mysql -uroot -p123 /*切换数据库*/ use mysql /*修改root用户的密码*/ update user ...

  8. MySQL重置root用户密码的方法【亲测可用】

    1. 报错截图 2.当确认已经忘记MySQL密码,则可以通过以下方案重置root用户密码.双击打开C:\Program Files\MySQL\MySQL Server 5.1\my.ini文件,如下 ...

  9. Ubuntu为mysql的root用户密码问题

    1.root用户免密码登录mysql Ubuntu装完mysql时,root用户可以免密登录,如果设置的root用户密码忘记了,想要使用root用户免密登录,修改在配置文件的[mysqld]节点下添加 ...

  10. Mysql修改root用户密码 For Mac 报错:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

    环境 Mysql版本:5.7.12 操作系统:OSX 10.11 安装文件:.dmg文件 MySQL:mysql-5.7.12-osx10.11-x86_64.dmg(注意5.7跟之前的字段有些不同, ...

随机推荐

  1. java 判断图片的类型

    // 这种方法如果遇到不是图片类型的文件会reader抛异常! public static void main(String[] args) throws IOException { // get i ...

  2. sass文件处理

    sass注释方式有两种: 1.标准的css注释/**/: 2.//双斜杠形式的单行注释(不会被转译): 标准的css注释 双斜杆单行注释 sass文件后缀名有两种: 1.后缀名为sass,不适用用大括 ...

  3. scale 和 zoom,以及zoom的一些变态用法

    zoom和scale这两个东西都是用于对元素的缩放,一下是其中一些区别: 1.scale的缩小是以图片的中心,zoom的缩小是以图片的左上角. 2.zoom的缩放改变了元素占据的空间大小:而scale ...

  4. CSS如何设置换行文字自动对齐

    CSS如何设置换行文字自动对齐 如图所示: 代码实现如下: <ul class='warn-page-content'>                <li>         ...

  5. matlab绘图(详细)(全面)

    Matlab绘图 强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数.此外,M ...

  6. 64位系统中连接Access数据库文件的一个问题

    近日在windows 7 64位系统中编译以前写的程序,发现在连接Access数据库时总是出现异常,提示“Microsoft.Jet.OLEDB.4.0”未在本机注册,同样的代码在32位的xp系统中却 ...

  7. Struts2的学习-属性驱动和模型驱动

    1.新建空项目,并托管到码云 2.设立maven 3.设置pom.xml 4.建包 5.在java包里建立两个类 package com.nf.entity; public class User { ...

  8. 为什么有的系统的事务码BSP_WD_CMPWB看不见Enhance Component这个按钮

    我的同事问我,为什么有的系统看不到下图7的按钮? 对比两张图里工具栏的差异. 答案 这是因为在图2(看不见Enhance Component按钮)的系统里,该系统的类型被设置为"SAP&qu ...

  9. 给于用户Agent权限设置

    问题:有一个用户需要有create\alter\drop job人权限.默认是只有sysadmin成员才有这个权限.肯定不能将用户放到这个组 答案:所有JOB都属于msdb库中读取和写入信息.所以,肯 ...

  10. hack-checkbox

    checkbox选择按钮要用我们自己的样式,看到这个的时候,很可能会以为需要checkbox才能实现,用css可能很难.其实狠简单. <style> .checkbox input{ di ...