MySQL的Root用戶密碼


緣由:最近北京市二環內大興土木,各種挖溝埋線。忽而一紙通令周末斷電,故多年不斷電的服務器,便令人有了關機后是否還能正常啟動的隱憂。其中一台較年邁的服務器中搭載有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

有興趣的請自行擴展咯


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM