mysql 8 如何重置 root 使用者密碼

預流發表於2018-12-04

最近很多新入職的同事問這個問題,特別是通過 homebrew 自動安裝的 mysql ,其版本預設已經是 8.0 了,由於增加了一些安全策略等限制,所以修改使用者密碼會稍微麻煩些,索性就把這個總結貼一下吧。

  1. 首先檢視 root 使用者相關資訊,在 mysql 資料庫的 user 表中:
select host, user, authentication_string, plugin from user;
複製程式碼

host:允許使用者登入的ip‘位置’%表示可以遠端; user:當前資料庫的使用者名稱; authentication_string:使用者密碼;在mysql 5.7.9以後廢棄了password欄位和password()函式; plugin:密碼加密方式;

如果發現 root 使用者的 authentication_string 欄位下有內容,先將其設定為空:

use mysql;
update user set authentication_string='' where user='root';
複製程式碼
  1. 重啟 mysql 服務,mac 裡直接命令把服務關閉:
mysql.server stop
複製程式碼

或者把 mysql 程式 kill 掉。然後在啟動 mysql 服務:

mysql.server start
複製程式碼
  1. 用 root 使用者登入,因為已經把 authentication_string 設定為空,所以可以免密碼登入:
mysql -u root -p
passwrod:
複製程式碼

不需要輸入密碼,直接回車即可

  1. 進入 mysql 庫,使用 ALTER 修改 root 使用者密碼:
ALTER user 'root' IDENTIFIED BY '123456' ;
複製程式碼

語句中的 root 需要跟你實際 user 表裡 root 使用者存的是 root 還是 root@localhost 而定,由於我這裡把密碼改成了 123456 這樣比較簡單的格式,可能 mysql 8 預設密碼策略不允許,非要改的話可以先修改一下密碼策略:

set global validate_password.length = 6 ;

set global validate_password.policy = 'LOW';

FLUSH PRIVILEGES;
複製程式碼

這裡把密碼長度由預設的8位改成了6位,並且密碼策略級別由 MEDIUM 改成了 LOW。如果要檢視密碼校驗相關設定的話可以直接查詢系統變數:

SHOW VARIABLES LIKE 'validate_password.%';
複製程式碼

相關文章