MySQL错误1819(HY000):密码不满足当前的策略要求

时间:2020-03-21 11:48:52  来源:igfitidea点击:

我们可能已经注意到,在为MySQL root用户设置密码时,系统将提示我们启用"验证密码"组件。
如果已启用,则验证密码组件将自动检查给定密码的强度,并强制执行用户只设置足够安全的密码。
如果我们提供弱密码,我们将遇到错误,如"错误1819(HY000):密码不满足当前的策略要求。
"从技术上讲,它实际上并不是一个错误。
这是一个内置安全机制,通知用户仅根据当前密码策略要求提供强密码。

让我告诉你一个例子。
我使用命令用root用户身份登录MySQL Server:

$mysql -u root -p

使用密码较小创建数据库用户:

mysql> create user 'theitroad'@'localhost' identified by 'mypassword';

我遇到以下错误:

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

看?
验证密码组件不允许我创建具有弱密码的用户(在这种情况下,即mypassword)。
在密码符合当前密码策略的要求或者禁用验证密码组件之前,我们将继续收到此错误。
我们将在以下部分看到如何在下一节中进行。

FIX - MySQL错误1819(HY000):密码不满足当前的策略要求

启用验证密码时强制执行三个密码验证策略:

  • 低长度> = 8个字符。
  • 中长> = 8,数字,混合案例和特殊字符。
  • 强度强> = 8,数字,混合案例,特殊字符和字典文件。

根据这些策略级别,我们需要设置适当的密码。
例如,如果将密码验证策略设置为介质,则必须设置至少8个字符的密码,包括数字,小写,大写和特殊字符。

首先,我们需要找到当前的密码策略级别。
为此,请运行以下命令以显示密码验证插件系统变量:

mysql> 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.09 sec)

如我们所见,当前强制密码级别是介质。
因此,我们的密码应该是8个字符长,其中一个混合案例和特殊字符。

我要设置这个密码密码123#@!使用命令:

mysql> create user 'theitroad'@'localhost' identified by 'Password123#@!';
Query OK, 0 rows affected (0.36 sec)

因此,为了修复"错误1819(HY000)..."错误,我们需要根据当前密码验证策略输入密码。

更改密码验证策略

我们还可以通过设置较低的密码策略来解决"错误1819(HY000)..."。

为此,请从MySQL提示符运行以下命令:

mysql> SET GLOBAL validate_password.policy = 0;

或者,

mysql> SET GLOBAL validate_password.policy=LOW;

然后检查密码验证策略是否已更改为低:

mysql> 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             | LOW   |
| validate_password.special_char_count | 1     |
+--------------------------------------+-------+
7 rows in set (0.00 sec)

现在,我们可以创建一个具有弱密码的用户:

mysql> create user 'senthil'@'localhost' identified by 'password';

要恢复返回中级策略,请从MySQL提示符运行此命令:

mysql> SET GLOBAL validate_password.policy=MEDIUM;

如果密码策略不会更改,请退出MySQL提示符并从终端窗口重新启动MySQL服务:

$sudo systemctl restart mysql

现在应该有效。

禁用密码验证策略

如果我们想创建具有弱密码的用户,只需禁用验证密码组件并在创建用户后重新启用它。

登录MySQL Server:

$mysql -u root -p

要暂时禁用验证密码组件,请从mysql提示符下运行以下命令:

mysql> UNINSTALL COMPONENT "file://component_validate_password";

使用我们选择的任何密码创建用户:

mysql> create user 'kumar'@'localhost' identified by '123456';

最后,启用验证密码组件:

mysql> INSTALL COMPONENT "file://component_validate_password";

我个人不建议将策略更改为较低级别或者禁用密码策略。
作为数据库用户或者普通用户,始终使用具有超过8个字符的强密码,包括数字,混合案例和空间字符。