注:此篇文章基于 MySQL8.0 版本。
关于修改密码
-
直接设置
mysqladmin -u root -p password 123456.
说明:执行此命令会要求输入原密码,且会警告操作不安全。 -
SQL语句
ALTER user 'root'@'localhost' IDENTIFIED BY '123456';
报错:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements(密码不符合当前的策略要求),MySQL8.0 以上密码策略要求必须要大小写字母加数字及特殊符号,如:abcABC123@,或者见下节修改密码策略。 -
丢失root密码
修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1,即可跳过密码验证,重启 mysqld 服务:
systemctl restart mysqld
,连接数据库,无需输入密码,直接回车即可登录MySQL。直接执行修改语句会报错,如下图所示:
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement,此时需要刷新权限flush privileges;
再执行修改语句。修改完成后,将 /etc/my.cnf 的 skip-grant-tables 配置项删除,重启MySQL服务。
关于密码策略
-
查看密码策略
SHOW VARIABLES LIKE 'validate_password%';
参数说明:
validate_password.check_user_name
用户名检测validate_password_dictionary_file
插件用于验证密码强度的字典文件路径validate_password_length
密码最小长度,参数默认为8,它有最小值的限制,最小值为:validate_password_number_count + validate_password_special_char_count + (2 * validate_password_mixed_case_count)validate_password_mixed_case_count
密码至少要包含的小写字母个数和大写字母个数validate_password_number_count
密码至少要包含的数字个数validate_password_policy
密码强度检查等级Policy Tests Performed 0 or LOW Length 1 or MEDIUM Length; numeric, lowercase/uppercase, and special characters 2 or STRONG Length; numeric, lowercase/uppercase, and special characters; dictionary file 默认是1,即MEDIUM,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符
validate_password_special_char_count
密码至少要包含的特殊字符数 -
修改密码策略
set global validate_password.policy=LOW;
set global validate_password.length=6;
ALTER user 'root'@'localhost' IDENTIFIED BY '123456';
说明:需要注意 MySQL8.0 较之前版本策略变量名有区别。
-
查询密码策略
select @@validate_password.length;