(001)MySQL5.7.21-ERROR 1045(28000)解决方法

1,问题描述
2,原因分析
3,解决方案

1,问题描述
  • 问题出现的需求背景:
    从数据库192.168.109.44/45 (业务数据库名testdb,业务用户名密码:testusr/Test2019)迁移数据到数据库192.168.51.43/44。
  • 数据迁移的方案:
#导出,在源数据库中执行
mysqldump -uroot -p --master-data=2 --single-transaction --set-gtid-purged=OFF -A >/tmp/testdb3306_191212.sql
#导入,在目标数据库中执行
mysql -uroot -p </tmp/testdb3306_191212.sql

  • 在目标库使用业务用户登录,报错
$ mysql -utestusr -pTest2019
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): ACCESS denied for user 'testusr'@'localhost' (using password:
  • 猜想解决方法尝试
#有人可能猜想update密码获取就好了,那就让大家看一下实验结果
$ mysql -uroot -p
mysql> use mysql;
mysql>update user set authentication_string=PASSWORD('Test2019') where user='testers';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

猜想的方案并不能成功,反而又报了一个错误。
那产生该问题的具体原因是什么呢?请往下看。

2,原因分析

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements错误的字面意思是:你的密码不能满足当前的策略需求
看到该报错,就会立马想到目标mysql数据库肯定开启了密码策略。验证步骤:

  • 在/etc/my.cnf文件中找到了启动校验密码机制的配置:
#for script
[mysqld]
plugin-load-add=validate_password.so
validate-password=FORCE_PLUS_PERMANENT
  • 登录目标库mysql,查看密码校验插件的状态
mysql>select plugin_name,plugin_status from information_schema.plugins where plugin_name like 'validate%';
+-------------------+---------------+
| PLUGIN_NAME       | PLUGIN_STATUS |
+-------------------+---------------+
| validate_password | ACTIVE        |
+-------------------+---------------+

通过以上两步验证,果然证实目标库启用了校验密码的插件。

查看该目标数据库的具体密码策略参数值:

root@localhost [(none)]>show variables like 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_check_user_name    | ON     |
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
7 rows in set (0.00 sec)

校验密码的策略是 validate_password_policy=MEDIUM。其实校验密码策略有3个级别:validate_password_policy的3个级别

  • 0 or LOW
    仅要求密码长度,可通过命令set global validate_password_length=number;进行更改。
  • 1 or MEDIUM
    要求密码长度;且要求数字,大小写字母,特殊字符都有。
  • 2 or STRONG
    要求密码长度;且要求数字,大小写字母,特殊字符都有;同时要求长度为4或更长的密码子字符串必须与字典文件中的单词不匹配(如果已经指定了一个单词)。要指定字典文件,请修改validate_password_dictionary_file。
3,解决方案

由以上原因分析,可得出两种解决方法:
方法一:把密码修改成符合密码策略要求的密码,比如Test@2019.com

$ mysql -uroot -p
mysql> use mysql;
mysql>update user set authentication_string=PASSWORD('Test@2019.com') where user='testusr';
mysql>flush privileges;
# 查看新密码的强度
mysql>select validate_password_strength('Test@2019.com');
+---------------------------------------------+
| validate_password_strength('Test@2019.com') |
+---------------------------------------------+
|                                         100 |
+---------------------------------------------+
1 row in set (0.00 sec)

此处提到了校验密码强度的函数:validate_password_strength(password args)。如果没有安装validate_password.os校验密码插件,validate_password_xxx系统变量没有设置,语句中的密码就没法被检查,VALIDATE_PASSWORD_STRENGTH()函数也总是返回0。例如,如果没有安装插件,帐户的密码可以少于8个字符,甚至没有密码。

方法二:降低密码策略级别

$ mysql -uroot -p
mysql> use mysql;
mysql> show variables like 'validate_password_policy';
+--------------------------+--------+
| Variable_name            | Value  |
+--------------------------+--------+
| validate_password_policy | MEDIUM |
+--------------------------+--------+
mysql>set global validate_password_policy=0;
mysql> show variables like 'validate_password_policy';
+--------------------------+--------+
| Variable_name            | Value  |
+--------------------------+--------+
| validate_password_policy |  LOW   |
+--------------------------+--------+
mysql>update user set authentication_string=PASSWORD('Test2019') where user='testers';
Query OK, 0 rows affected, 1 warning(0.00 sec)
Rows matched: 1  Changed: 0 Warnings: 1
#再把密码策略改成原来的级别:
mysql>set global validate_password_policy=1;

通过以上两种解决方案,用户名密码都可以正常登录。
mysql -utestusr -p密码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL 5.7.21是一个常用的关系型数据库管理系统,以下是它的安装配置教程: 1. 下载MySQL安装包:在MySQL官方网站上下载MySQL 5.7.21的安装包,选择与你的操作系统版本相对应的安装包。 2. 安装MySQL:双击安装包,根据安装向导的提示进行安装。在安装向导中选择“完整”安装类型,以便安装所有的MySQL组件。 3. 配置MySQL:安装完成后,打开MySQL的安装目录,在目录中找到my.ini文件(Windows操作系统)或my.cnf文件(Linux/Unix操作系统),用文本编辑器打开。 4. 配置MySQL的字符集:在配置文件中找到[mysqld]节,添加或修改字符集的配置,例如: character-set-server=utf8 collation-server=utf8_general_ci 5. 配置MySQL的端口号:在配置文件中找到[mysqld]节,添加或修改端口号的配置,例如: port=3306 6. 配置MySQL的日志文件:在配置文件中找到[mysqld]节,添加或修改日志文件的配置,例如: log-error=mysql_error.log 7. 启动MySQL服务:根据你的操作系统,通过命令行或服务管理器启动MySQL服务。 8. 设置MySQL的root用户密码:通过命令行登录MySQL,输入以下命令修改root用户的密码: mysql -u root -p ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_new_password'; 9. 配置MySQL的防火墙规则:如果你的操作系统有防火墙,需要添加允许MySQL访问的规则。 10. 测试MySQL连接:打开命令行,输入以下命令测试与MySQL的连接: mysql -u root -p 输入密码后成功连接表示安装配置成功。 以上就是MySQL 5.7.21的安装配置教程,希望对你有所帮助。 ### 回答2: MySQL是一种开源的关系型数据库管理系统,被广泛应用于Web开发中。下面是MySQL 5.7.21版本的安装配置教程: 1.在MySQL官网(https://dev.mysql.com/downloads/mysql/)下载适用于你的操作系统的安装包。根据操作系统选择合适的版本,比如Windows 64位版本。 2.双击安装包进行安装,按照提示进行操作。可以选择自定义安装路径和组件。 3.选择是否安装MySQL Server和MySQL Workbench等组件,根据需要进行选择并确认安装。 4.在安装程序中选择自定义配置方式,可以设置MySQL服务的端口号、字符集、权限验证方式等。 5.设置root用户的密码。强烈建议设置一个强密码来保护数据库的安全性。 6.选择启用MySQL服务作为Windows系统的服务,以便系统启动时自动启动MySQL服务。 7.完成安装后,可以使用MySQL Workbench等工具连接到MySQL服务器。在工具中输入MySQL服务器的IP地址、端口号、用户名和密码进行连接。 8.连接成功后,可以创建新的数据库、新的表以及对数据进行增删改查等操作。 9.在配置文件my.cnf中可以对MySQL进行进一步配置,如设置缓冲区大小、最大连接数、超时时间等。 10.在使用MySQL过程中,要注意保持数据库的备份和定期维护工作,以确保数据的安全性和稳定性。 以上是MySQL 5.7.21版本的安装配置教程,希望对你有帮助。若有任何疑问,可以参考官方文档或在相关社区寻求帮助。 ### 回答3: MySQL是一种常用的开源关系型数据库管理系统,本文将为您详细介绍MySQL 5.7.21的安装配置教程。 首先,您需要从MySQL官方网站下载MySQL 5.7.21的安装包,并解压到您选择的安装目录。接下来,打开命令行界面,进入MySQL的安装目录,执行以下命令以进行初始配置: 1. 执行命令`mysqld --initialize --console`来初始化MySQL的数据目录。这将生成一个临时密码,要牢记这个密码,因为您稍后需要用到它。 2. 执行命令`mysqld --install`来安装MySQL服务。 3. 执行命令`net start mysql`来启动MySQL服务。如果您希望MySQL服务在每次开机时自动启动,可以执行命令`sc config mysql start=auto`来设置自动启动。 4. 执行命令`mysql_secure_installation`来进行数据库的初始设置。按照提示依次输入临时密码以及设置新密码、删除匿名用户、禁止root远程登录、删除测试数据库等操作。 至此,MySQL 5.7.21的安装和基本配置已经完成。 接下来,您可以使用图形界面工具(如Navicat、MySQL Workbench等)或命令行工具(如MySQL Shell、MySQL命令行客户端等)连接到MySQL服务器,并进行数据库操作。 需要注意的是,MySQL的配置文件(my.ini或my.cnf)位于MySQL的安装目录下,您可以根据需要对其进行修改来调整MySQL的配置。 总结:通过下载MySQL 5.7.21的安装包,解压、配置、安装、初始化及设置等步骤,完成了MySQL 5.7.21的安装和基本配置。接下来,您可以使用适当的工具连接到MySQL服务器,并进行数据库操作。 希望以上对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值