1. 程式人生 > 其它 >MySQL8.0.23版本的root密碼重置最優解法

MySQL8.0.23版本的root密碼重置最優解法

技術標籤:root密碼mysqlsql資料庫

MySQL8.0.23版本的root密碼重置最優解法(系統:Ubuntu)

該方法編輯於2021年2月7日,自己使用的版本是8.0.23,事情的起因要從袁隆平教授說起…要從一本教科書說起,有一章節是“MySQL安全管理與許可權管理”,其中有提到更改root賬戶
ps:此方法適用於任何忘記,胡亂修改或已經糟蹋root密碼的同學
本著實踐主義的精神,我在自己的MySQL資料庫中(當前登陸為root賬戶)中敲下了:

update user set authentication_string=MD5("123") where user
= "root" and host = "localhost"; flush privileges;

在這裡不得不說一下現在的百度google教程,同學可以先自己看一下自己的user表結構,在user表中一般而言,我們最關注三個欄位,分別是localhost的host列,使用者名稱root的user列,以及儲存密碼的authentication_string列

desc user;

注意:儲存密碼的欄位已經不是password了(舊版本可能是,而且很多改root密碼教程也是還停留在password),其次我這個較新的版本已經在這裡不適用password函式,教材使用的是MD5加密,目前仍然很多百度的都是下面這種,這個方法已經完全不適用了

...password = password("123")...

當我敲下上面的程式碼之後,重新退出重啟伺服器並嘗試使用新密碼123登陸的時候,吧唧…密碼錯誤報錯

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

之後就是連續三個小時的百度攻略,找回密碼操作…接連的失敗告終…
24小時之後,誤打誤撞的刪除了原authentication_string儲存的密碼,然後重新設定新的密碼,下面上乾貨,親測~

1.免密登入

將mysql登陸設定為免密登陸(這一步我暫時不知道可不可以使用debian.cnf配置中的debian-sys-maint賬戶登陸進行修改root的密碼,我怕debian許可權不夠無法改動root所以還是選擇了root免密登陸,有興(wu)趣(liao)的同學可以嘗試下,這一步主要是為了能進入伺服器),具體方法為:

進入配置檔案,我的配置檔案在

/etc/mysql/mysql.conf.d

使用sudo開啟,因為必須要su許可權才能更改etc的配置,當然因為我沒有在家目錄下自定義配置,所以都是預設的,這個配置很有可能每個人位置不一樣,而且你們也是很可能自己配置了,那麼可以用在終端上用mysql --help檢視此時哪個配置在發揮作用,當然也不是一下子能找到的,比如我目前配置檔案在第二個/etc/mysql/my.cnf中,但是開啟來沒有配置的選項,裡面是兩個路徑,這個路徑才是真正的配置檔案,就好比是一個“巢狀”
在這裡插入圖片描述

sudo vim mysqld.cnf

開啟之後在第15行左右的位置[mysqld]的下面插入一行
在這裡插入圖片描述
之後儲存退出vim即可

2.清空authentication_string密碼

其實這一步是我誤打誤撞進去的,也是被網上各種複製的教程帶跑偏了,今天晚上在研究user表時,看到plugin欄位預設是caching_sha2_password,所以我想到有可能之前不應該用md5加密,而應該用sha2,所以:
注意:這是關鍵步驟

update user set  authentication_string=sha2("1234",32) where user = 'root';
flush privileges;

然後再看user表中root的資料,發現authentication_string的值居然變為null了,此時我有預感我可能可以真正的免密登陸了
回到配置檔案(注意使用sudo),把上面的在配置中加的那一行程式碼

skip-grant-tables

給刪了,然後重啟MySQL伺服器,然後登陸

mysql -u root

果然真的能登陸了,真正的免密登陸,因為此時root賬戶的密碼已經被清掉了,但是為啥用sha2摘要演算法不是算出一個密碼而是清掉一個密碼我就不懂了,肯定有大佬知道…

3.重新設定密碼

重新設定密碼就簡單了,一行程式碼搞定:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123';

ps:MySQL在第一次安裝之後,也是沒有密碼的,第一次登陸伺服器時可能需要sudo mysql -uroot登陸,登陸之後自己再設定mysql的root密碼,設定方法和上述程式碼一模一樣

4.結束

之後就可以用新密碼重新登陸MySQL啦

mysql -u root -p123

5.最後

  1. 本次也是誤打誤撞然後清空了root密碼,具體的原理並不清晰,比如為啥使用sha2卻把root密碼authentication_string欄位變為NULL了,如果你的plugin是md5,有可能就是用MD5才是正確的,如果是sha1,就用sha1嘗試,沒有看官方文件,所以整個過程很痛苦,因此,嚴格上來說,這是一個提問帖,坐等大佬,感謝
  2. 很多地方可能沒有講詳細,比如資料庫重啟,配置檔案,如何找debian-sys-maint賬戶,vim編輯等,有問題歡迎提問,常在csdn,隨時在的。
  3. 系統為Ubuntu,Mac方法應該一樣,主要Mac的MySQL配置檔案已經被優化了,一定是需要自己做一個my.cnf的,一般同學應該都放在家目錄下,所以檔案位置肯定和我不一樣
  4. 可能同學還是舊版本,比如5.x的,網上的方法可能也還是適用的,那麼這個方法就肯定不適用了(因為user表中密碼欄位都不一樣了),所以版本注意一下