修复 – MySQL ERROR 1819 (HY000): 您的密码不符合当前政策要求

您可能已经注意到,系统将提示您启用 VALIDATE PASSWORD 组件同时 为 MySQL root 设置密码 用户。 如果启用,验证密码组件将自动检查给定密码的强度并强制用户仅设置足够安全的密码。 如果您提供弱密码,您将遇到这样的错误 – ERROR 1819 (HY000): Your password does not satisfy the current policy requirements.

从技术上讲,这实际上并不是一个错误。 这是一种内置的安全机制,可根据当前密码策略要求通知用户仅提供强密码。

让我给你看一个 example. 我以身份登录 MySQL 服务器 root 用户使用命令:

$ mysql -u root -p

使用弱密码创建数据库用户:

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

我遇到以下错误:

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
ERROR 1819 (HY000):您的密码不符合当前政策要求

看? 这 Validate Password 组件不允许我使用弱密码创建用户(即 mypassword 在这种情况下)。

在密码满足当前密码策略的要求或禁用 Validate Password 零件。 我们将在下一节中看到如何做到这一点。

修复 – MySQL ERROR 1819 (HY000):您的密码不符合当前政策要求

在以下情况下强制执行三个级别的密码验证策略 Validate Password 插件已启用:

  • 低的 长度 >= 8 个字符。
  • 中等的 长度 >= 8、数字、混合大小写和特殊字符。
  • 强的 长度 >= 8、数字、混合大小写、特殊字符和字典文件。

根据这些策略级别,您需要设置适当的密码。 为了 example,如果密码验证策略设置为“中”,则必须设置至少包含数字、小写、大写和特殊字符在内的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)
在 mysql 中显示密码验证策略

如您所见,当前强制执行的密码级别是 中等的. 所以我们的密码应该是 8 个字符长,包含数字、大小写混合和特殊字符。

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

mysql> create user 'ostechnix'@'localhost' identified by 'Password123#@!';
Query OK, 0 rows affected (0.36 sec)
在mysql中创建数据库用户在mysql中创建数据库用户

看? 现在可以了! 所以,为了修复“ERROR 1819 (HY000)...” 错误,您需要按照当前密码验证策略输入密码。

更改 MySQL 中的密码验证策略

你也可以解决“ERROR 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中的密码验证策略

要恢复到 MEDIUM 级别策略,只需从 mysql 提示符运行以下命令:

mysql> SET GLOBAL validate_password.policy=MEDIUM;

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

$ sudo systemctl restart mysql

现在它应该可以工作了。

小心: 我们的一位读者指出,以下命令中有错字:

mysql> SET GLOBAL validate_password.policy=LOW;

它应该是:

mysql> SET GLOBAL validate_password_policy=LOW;

请注意上述命令中的下划线。 由于我已删除设置,因此无法验证此命令。 但我假设该命令在较新版本的 MySQL 中已更改。

禁用密码验证策略

如果您想使用弱密码创建用户,只需禁用 Validate Password 组件并在创建用户后重新启用它。

登录 MySQL 服务器:

$ 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";
在 mysql 中临时禁用密码验证策略在 mysql 中临时禁用密码验证策略

我个人不建议将策略更改为较低级别或禁用密码策略。 无论是数据库用户还是普通用户,始终使用包含数字、混合大小写和空格字符在内的 8 个以上字符的强密码。

结论

在本指南中,我们了解了一个常见的 MySQL 错误 – ERROR 1819 (HY000): Your password does not satisfy the current policy requirements 以及如何在 Linux 中修复它。 我们还学习了如何禁用密码策略以允许使用弱密码。

相关阅读:

  • 安装 ApacheMySQL, PHP (LAMP Stack) 在 Ubuntu 20.04 LTS
  • 在 Ubuntu 20.04 LTS 上安装 Nginx、MySQL、PHP(LEMP 堆栈)