MySql 8.0 登录密码

296 阅读2分钟

报错概览[mac][完善于2019-05-24 19:19:09]

  1. Client does not support authentication protocol requested by server; consider upgrading MySQL client.
  2. Your password does not satisfy the current policy requirements.
  3. 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

二、尝试解决问题

  1. 安全模式免密码登录

     $ mysqld_safe --skip-grant-tables & 
    
  2. 在连接MySQL的时候,没有输入密码,直接回车就连上了。是因为目前版本的MySQL为root用户随机生成了一个密码。然而当通过express连接MySQL时,需要填写password字段。因此我们需要修改密码,命令如下:

     mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword';
     mysql> FLUSH PRIVILEGES;
    
  3. 当我输入如下命令:

     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或更长的密码子字符串不能匹配字典文件中的字词(如果已经指定)的条件。

  1. 尝试修改密码规范:

     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;
      
  2. 修改密码规范,解决②:

     mysql> set global validate_password.policy=0;
     mysql> set global validate_password.length=1;
    
  3. 修改简单密码,解决①:

     mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
     mysql> FLUSH PRIVILEGES;
    

成功解决问题。


三、身份验证插件问题

  1. 查看当前身份验证插件

     mysql> SHOW VARIABLES LIKE 'default_authentication_plugin';
     
     +-------------------------------+-----------------------+
     | Variable_name                 | Value                 |
     +-------------------------------+-----------------------+
     | default_authentication_plugin | mysql_native_password |
     +-------------------------------+-----------------------+