ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

引言


在给mysql-5.7重置密码的时候,会遇到上面的错误,借此错误来分下一下mysql中安全级别


为了加强安全性,MySQL5.7为root用户随机生成了一个密码,在error log中,关于error log的位置,如果安装的是RPM包,则默认是/var/log/mysqld.log。


一般可通过log_error设置


mysql> select @@log_error;
+---------------------+
| @@log_error         |
+---------------------+
| /var/log/mysqld.log |
+---------------------+
row in set (0.00 sec)

可通过# grep "password" /var/log/mysqld.log 命令获取MySQL的临时密码

2016-01-19T05:16:36.218234Z 1 [Note] A temporary password is generated for root@localhost: waQ,qR%be2(5

用该密码登录到服务端后,必须马上修改密码,不然会报如下错误:

mysql> select user();
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

如果只是修改为一个简单的密码,会报以下错误:

mysql>  ALTER USER USER() IDENTIFIED BY '12345678';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

这个其实与validate_password_policy的值有关。


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,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。


有时候,只是为了自己测试,不想密码设置得那么复杂,譬如说,我只想设置root的密码为123456。


必须修改两个全局参数:


首先,修改validate_password_policy参数的值

mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)

这样,判断密码的标准就基于密码的长度了。这个由validate_password_length参数来决定。

mysql> select @@validate_password_length;
+----------------------------+
| @@validate_password_length |
+----------------------------+
|                          8 |
+----------------------------+
1 row in set (0.00 sec)

validate_password_length参数默认为8,它有最小值的限制,最小值为:


validate_password_number_count

+ validate_password_special_char_count

+ (2 * validate_password_mixed_case_count)

其中,validate_password_number_count指定了密码中数据的长度,validate_password_special_char_count指定了密码中特殊字符的长度,validate_password_mixed_case_count指定了密码中大小字母的长度。


这些参数,默认值均为1,所以validate_password_length最小值为4,如果你显性指定validate_password_length的值小于4,尽管不会报错,但validate_password_length的值将设为4。如下所示:


mysql> select @@validate_password_length;
+----------------------------+
| @@validate_password_length |
+----------------------------+
|                          8 |
+----------------------------+
1 row in set (0.00 sec)
mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)
mysql> select @@validate_password_length;
+----------------------------+
| @@validate_password_length |
+----------------------------+
|                          4 |
+----------------------------+
1 row in set (0.00 sec)


如果修改了validate_password_number_count,validate_password_special_char_count,validate_password_mixed_case_count中任何一个值,则validate_password_length将进行动态修改。


mysql> select @@validate_password_length;
+----------------------------+
| @@validate_password_length |
+----------------------------+
|                          4 |
+----------------------------+
1 row in set (0.00 sec)
mysql> select @@validate_password_mixed_case_count;
+--------------------------------------+
| @@validate_password_mixed_case_count |
+--------------------------------------+
|                                    1 |
+--------------------------------------+
1 row in set (0.00 sec)
mysql> set global validate_password_mixed_case_count=2;
Query OK, 0 rows affected (0.00 sec)
mysql> select @@validate_password_mixed_case_count;
+--------------------------------------+
| @@validate_password_mixed_case_count |
+--------------------------------------+
|                                    2 |
+--------------------------------------+
1 row in set (0.00 sec)
mysql> select @@validate_password_length;
+----------------------------+
| @@validate_password_length |
+----------------------------+
|                          6 |
+----------------------------+
1 row in set (0.00 sec)


当然,前提是validate_password插件必须已经安装,MySQL5.7是默认安装的。


那么如何验证validate_password插件是否安装呢?可通过查看以下参数,如果没有安装,则输出将为空。


mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_dictionary_file    |       |
| validate_password_length             | 6     |
| validate_password_mixed_case_count   | 2     |
| validate_password_number_count       | 1     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 1     |
+--------------------------------------+-------+
6 rows in set (0.00 sec)
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
存储
RandomAccessFile实现文件分割、合并
RandomAccessFile实现文件分割、合并
281 0
|
存储 Prometheus 监控
PromQL 快速入门:理解基本查询语法
【8月更文第29天】PromQL (Prometheus Query Language) 是 Prometheus 监控系统中用于查询和聚合时间序列数据的一种表达式语言。PromQL 具有丰富的语法和功能,可以轻松地从 Prometheus 存储的数据中提取有用的信息。本文将介绍 PromQL 的基础知识,包括如何构造简单的查询语句,并通过代码示例来演示这些概念。
584 1
|
机器学习/深度学习 数据采集 监控
Scikit-learn机器学习
【5月更文挑战第3天】Scikit-learn是一个基于NumPy、SciPy和Matplotlib的Python机器学习库,提供数据预处理到模型评估的全套工具。支持监督学习、无监督学习和降维等任务。要安装Scikit-learn,运行`pip install scikit-learn`。流程包括:数据准备(如加载鸢尾花数据集并划分训练测试集)、选择模型(如SVM分类器)、模型训练、模型评估(计算准确度)、特征工程和数据预处理(如特征缩放)、超参数调优(如Grid Search CV)、模型可视化(如混淆矩阵)和部署。
|
NoSQL 编译器 Linux
【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用
【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用
288 0
|
负载均衡 监控 Java
新手入门gateway基本配置详解与深入分析
欢迎关注 `威哥爱编程` 一起交流学习,人生海海,相遇就是缘分,让我们以技术为信物,成为相互惦记的人。
663 1
|
存储 Kubernetes API
k8s教程(Volume篇)-动态存储管理案例(GlusterFS)
k8s教程(Volume篇)-动态存储管理案例(GlusterFS)
371 0
|
分布式计算 Hadoop 关系型数据库
使用Sqoop将数据导入Hadoop的详细教程
使用Sqoop将数据导入Hadoop的详细教程
|
JSON 数据格式
“JSON parse error: Unexpected character (‘1‘ (code 49))的解决方式
“JSON parse error: Unexpected character (‘1‘ (code 49))的解决方式
|
机器学习/深度学习 自然语言处理 数据挖掘
预训练语言模型中Transfomer模型、自监督学习、BERT模型概述(图文解释)
预训练语言模型中Transfomer模型、自监督学习、BERT模型概述(图文解释)
473 0