MySQL错误1819(HY000):密码不满足当前的策略要求
我们可能已经注意到,在为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个字符的强密码,包括数字,混合案例和空间字符。