报错概览[mac][完善于2019-05-24 19:19:09]
- Client does not support authentication protocol requested by server; consider upgrading MySQL client.
- Your password does not satisfy the current policy requirements.
- Unknown system variable 'validate_password_policy'.
参考链接
一、发现问题
使用 Express 链接数据库,在通过界面表单提交数据,向MySQL数据库插入数据时,程序报错①:
Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
二、尝试解决问题
-
安全模式免密码登录
$ mysqld_safe --skip-grant-tables &
-
在连接MySQL的时候,没有输入密码,直接回车就连上了。是因为目前版本的MySQL为root用户随机生成了一个密码。然而当通过express连接MySQL时,需要填写password字段。因此我们需要修改密码,命令如下:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword'; mysql> FLUSH PRIVILEGES;
-
当我输入如下命令:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';//将新密码改为root
-
报错②:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
-
原因是密码过于简单,不符合MySQL密码规范,通过如下命令查看密码规范:
mysql> SHOW VARIABLES LIKE 'validate_password%'; +--------------------------------------+--------+ | Variable_name | Value | +--------------------------------------+--------+ | validate_password.check_user_name | ON | //用户名检测,默认关闭 | validate_password.dictionary_file | | | validate_password.length | 8 |//长度至少为8位 | validate_password.mixed_case_count | 1 |//至少有一个大写小字母 | validate_password.number_count | 1 |//至少有一个数字 | validate_password.policy | MEDIUM |//安全策略(MEDIUM|0、LOW|1、STRONG|2) | validate_password.special_char_count | 1 |//至少一个特殊字符 +--------------------------------------+--------+
-
安全策略参数说明:
- LOW :策略仅测试密码长度。密码长度必须至少为8个字符。
- MEDIUM :策略添加了密码必须至少包含1个数字字符,1个小写字符,1个大写字符和1个特殊(非字母数字)字符的条件。
- STRONG :策略添加了长度为4或更长的密码子字符串不能匹配字典文件中的字词(如果已经指定)的条件。
-
-
尝试修改密码规范:
mysql> set global validate_password.policy=0;//将安全策略降低 mysql> set global validate_password.length=1;//将密码长度降低
-
报错③:
ERROR 1193 (HY000): Unknown system variable 'validate_password_policy'
-
修改一个满足条件的密码,解决③:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Root123@';//至少含一个大写字母、小写字母、数字、特殊符号 mysql> FLUSH PRIVILEGES;
-
-
修改密码规范,解决②:
mysql> set global validate_password.policy=0; mysql> set global validate_password.length=1;
-
修改简单密码,解决①:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'; mysql> FLUSH PRIVILEGES;
成功解决问题。
三、身份验证插件问题
-
查看当前身份验证插件
mysql> SHOW VARIABLES LIKE 'default_authentication_plugin'; +-------------------------------+-----------------------+ | Variable_name | Value | +-------------------------------+-----------------------+ | default_authentication_plugin | mysql_native_password | +-------------------------------+-----------------------+