閒來無事,突然想學個MySQL,沒想到開頭就是這麼難,關於修改root密碼可謂是一波三折
而這之中曲折的罪魁禍首這是MySQL的版本問題,下面我就分爲兩部分來說說修改root密碼,以MySQL5.7.9爲界線,因爲mysql 5.7.9以後廢棄了password字段和password()函數;authentication_string:字段表示用戶密碼。
mysql 5.7.9以下修改密碼很方便,基本就是三種方法
1、 用SET PASSWORD命令
mysql> set password for 用戶名@localhost = password('新密碼');
2、用UPDATE直接編輯user表
mysql> use mysql;
mysql> update user set password=password('新密碼') where user='root' and host='localhost';
mysql> flush privileges;
3、在知道原密碼的前提下,用mysqladmin
mysql> mysqladmin -u用戶名 -p舊密碼 password 新密碼
mysql 5.7.9以上的版本修改就要注意很多地方了
1、root用戶authentication_string字段下有內容,先將其設置爲空,沒有跳過
desc user;#查看是否爲空
use mysql;
update user set authentication_string='' where user='root'
2、直接執行
ALTER user 'root'@'%' IDENTIFIED BY '新密碼'
關於密碼策略的修改問題以及數據庫工具連接問題(報錯1251)
首先我們要查看 mysql 初始的密碼策略,輸入show variables like 'validate_password%';
設置密碼的驗證強度等級,設置 validate_password.policy 的全局參數爲 LOW 即可,
mysql> set global validate_password.policy=LOW;
設置密碼的長度,設置validate_password.length的全局參數即可,
mysql> set global validate_password.length=6;
關於 mysql 密碼策略相關參數;
validate_password.length 固定密碼的總長度;
validate_password.dictionary_file 指定密碼驗證的文件路徑;
validate_password.mixed_case_count 整個密碼中至少要包含大/小寫字母的總個數;
validate_password.number_count 整個密碼中至少要包含阿拉伯數字的個數;
validate_password.policy 指定密碼的強度驗證等級,默認爲 MEDIUM;
validate_password.special_char_count 整個密碼中至少要包含特殊字符的個數;
關於 validate_password.policy 的取值:
0/LOW:只驗證長度;
1/MEDIUM:驗證長度、數字、大小寫、特殊字符;
2/STRONG:驗證長度、數字、大小寫、特殊字符、字典文件;
然後還有一點很重要就是user表中的這個host字段,root用戶的host在不同版本的取值也不一樣,這對後面修改密碼和加密規則都有影響,
mysql> use mysql;
mysql> select user,host from user;
1、完全忘記密碼
mysql> use mysql;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '新密碼';
mysql> FLUSH PRIVILEGES;
2、記得原密碼,輸入命令行最後輸入老密碼確定
mysql> mysqladmin -u root -p password 新密碼
'localhost' 指的是用戶開放的IP,可以是'localhost'(僅本機訪問,相當於127.0.0.1),可以是具體的'*.*.*.*'(具體某一IP),也可以是 '%' (所有IP均可訪問)
例如修改加密規則的兩種不同方式,解決1251錯誤
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密碼'
FLUSH PRIVILEGES; #刷新權限
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新密碼';
FLUSH PRIVILEGES; #刷新權限
注:mysql8 之前的版本中加密規則是mysql_native_password,而在mysql8之後,加密規則是caching_sha2_password,連接sqlyog時出現加密規則錯誤1521 ,解決問題方法有兩種,一種是升級navicat驅動,一種是把mysql用戶登錄密碼加密規則還原成mysql_native_password.
遠程連接修改,其中“%”表示允許所有機器能訪問root用戶
update user set host='%' where user='root';
flush privileges;
原文出處:https://www.cnblogs.com/Mattmao/p/11550991.html