您的密码不符合当前策略要求

我想在MySQL中创建一个新用户,语法如下:

create user 'demo'@'localhost' identified by 'password';

但是它会返回一个错误:

您的密码不符合当前策略要求。

我试过很多密码,但都没用。我该如何解决这个问题?

556854 次浏览

因为你的密码。在MySQL客户端中使用以下查询可以看到密码验证配置指标:

SHOW VARIABLES LIKE 'validate_password%';

输出应该是这样的:

+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password.check_user_name    | ON    |
| validate_password.dictionary_file    |       |
| validate_password.length             | 6     |
| validate_password.mixed_case_count   | 1     |
| validate_password.number_count       | 1     |
| validate_password.policy             | LOW   |
| validate_password.special_char_count | 1     |
+--------------------------------------+-------+

然后可以将密码策略级别设置低一些,例如:

SET GLOBAL validate_password.length = 6;
SET GLOBAL validate_password.number_count = 0;

检查MySQL文档

注意:这可能不是一个安全的解决方案。但是如果您正在测试环境中工作,只需要快速修复,甚至不关心安全设置。这是一个快速的解决方案。

当我运行“mysql_secure_installation”并将密码安全级别修改为“中等”时,同样的问题发生在我身上。

我通过运行以下程序绕过了这个错误:

mysql -h localhost -u root -p
mysql>uninstall plugin validate_password;

如果需要,请确保重新安装插件“validate_password”。

执行sudo mysql_secure_installation. exe命令后。

  1. 运行sudo mysql进入mysql提示符。
  2. 运行SELECT user,authentication_string,plugin,host FROM mysql.user;检查用户是否有插件auth_socket
  3. 然后在运行之前运行uninstall plugin validate_password;来删除特权
  4. . this __abc0请确保将< em > < / em >密码更改为强密码

注意:查看这个链接https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-18-04以获得更多帮助

步骤1:检查默认的身份验证插件

SHOW VARIABLES LIKE 'default_authentication_plugin';

步骤2:veryfing您的密码验证要求

SHOW VARIABLES LIKE 'validate_password%';

步骤3:使用正确的密码要求设置用户

CREATE USER '<your_user>'@'localhost' IDENTIFIED WITH '<your_default_auth_plugin>' BY 'password';

如果你不关心密码策略。你可以通过下面的mysql命令将其设置为LOW:

mysql> SET GLOBAL validate_password.length = 4;
mysql> SET GLOBAL validate_password.policy=LOW;

MySQL 8*

SET GLOBAL validate_password.policy=LOW

参考链接来解释策略- 点击这里

此错误消息与表中存储的密码无关。如果键入(在SQL控制台上),也会出现这种情况

“选择密码(“123456789”)”

或者,如果

“选择密码(“A123456789”)”

或者,如果

“选择密码(“! 123456789”)”

如果你输入

“选择密码(一个! a123456789)”

那么它就会起作用。只需使用大+小字母,特殊字符和数字创建您的密码。

您可以在my.cnf中禁用这些检查,但这样您就会有安全风险!

在[mysqld]中添加:

validate_password_policy=LOW
validate_password_special_char_count=0
validate_password_length=0
validate_password_mixed_case_count=0
validate_password_number_count=0

我有同样的问题,答案就在你面前,记得当你在安装mysql的时候运行脚本

sudo mysql_secure_installation

在这里您可以选择您想选择的密码类型

密码验证策略有三种级别:

LOW长度>= 8 中等长度>= 8,数字,混合大小写,特殊字符 STRONG长度>= 8,数字,混合大小写,特殊字符和字典文件

请输入0 = LOW, 1 = MEDIUM, 2 = STRONG:

你必须给相同的策略设置密码

下面是一些密码示例 对于类型0:abcdabcd
对于类型1:abcd1234
对于类型2:ancd@1234

在我看来,将“validate_password_policy”设置为“低”或卸载“验证密码插件”不是正确的做法。永远不要牺牲数据库的安全性(除非你真的不在乎)。我想知道为什么人们甚至建议这些选项,当你可以选择一个好的密码。

为了克服这个问题,我在mysql中执行了以下命令:显示类似'validate_password%'的变量根据@JNevill的建议。我的“validate_password_policy”被设置为Medium,还有其他一些东西。下面是它执行的截图:验证密码策略

结果是不言自明的。对于有效密码(当“密码策略”为“中”时):

  • 密码长度至少为8个字符
  • 混合大小写计数为1(至少1个小写字母和1个大写字母)
  • Number count是1
  • 最小特殊字符数为1

因此,有效的密码必须遵守策略。以上规则的有效密码示例可能是:

  • Student123@
  • NINZAcoder 100美元
  • demoPass # 00

您可以选择任何组合,只要它满足策略。

对于其他“validate_password_policy”,你可以简单地查看不同选项的值,并相应地选择你的密码(我还没有尝试“强”)。

https://dev.mysql.com/doc/refman/5.6/en/validate-password-options-variables.html

对于Laravel用户在MySQL 8.0中遇到此问题。x,添加

'modes'=> [
'ONLY_FULL_GROUP_BY',
'STRICT_TRANS_TABLES',
'NO_ZERO_IN_DATE',
'NO_ZERO_DATE',
'ERROR_FOR_DIVISION_BY_ZERO',
'NO_ENGINE_SUBSTITUTION',
],

到你的database.php文件如下所示:

// database.php


'connections' => [


'mysql' => [
'driver'      => 'mysql',
'host'        => env( 'DB_HOST', '127.0.0.1' ),
'port'        => env( 'DB_PORT', '3306' ),
'database'    => env( 'DB_DATABASE', 'forge' ),
'username'    => env( 'DB_USERNAME', 'forge' ),
'password'    => env( 'DB_PASSWORD', '' ),
'unix_socket' => env( 'DB_SOCKET', '' ),
'charset'     => 'utf8mb4',
'collation'   => 'utf8mb4_unicode_ci',
'prefix'      => '',
'strict'      => true,
'engine'      => null,
'modes'       => [
'ONLY_FULL_GROUP_BY',
'STRICT_TRANS_TABLES',
'NO_ZERO_IN_DATE',
'NO_ZERO_DATE',
'ERROR_FOR_DIVISION_BY_ZERO',
'NO_ENGINE_SUBSTITUTION',
],
],
],

它帮我解决了问题。

问题是您的密码不符合密码验证规则。您可以简单地按照以下步骤来解决您的问题。

您可以通过键入下面的代码简单地看到密码验证配置矩阵。

mysql-> SHOW VARIABLES LIKE 'validate_password%';

然后在你的矩阵中,你可以找到下面有相应值的变量,在那里你必须检查validate_password_lengthvalidate_password_number_countvalidate_password_policy

检查这些变量的值。确保你的validate_password_length不应该大于6。您可以使用下面的代码将其设置为6。

SET GLOBAL validate_password_length = 6;

之后,你需要将validate_password_number_count设置为0。通过使用下面的代码来实现。

SET GLOBAL validate_password_number_count = 0;

最后你必须将你的validate_password_policy设置为low。使用MediumHigh不会允许您使用不太安全的密码。通过下面的代码将其设置为low

SET GLOBAL validate_password_policy=LOW;

您必须将MySQL密码策略更改为LOW。

以root用户登录

mysql -u root -p

改变政策

SET GLOBAL validate_password_policy=LOW;

SET GLOBAL validate_password_policy=0;

退出

exit

重启MySQL服务

sudo service mysql restart

请将MySQL密码策略修改为Low = 0 / Medium = 1 / High = 2。

SET GLOBAL validate_password_policy=0;
SET GLOBAL validate_password_policy=1;
SET GLOBAL validate_password_policy=2;

对于MySQL 8,你可以使用下面的脚本:

SET GLOBAL validate_password.LENGTH = 4;
SET GLOBAL validate_password.policy = 0;
SET GLOBAL validate_password.mixed_case_count = 0;
SET GLOBAL validate_password.number_count = 0;
SET GLOBAL validate_password.special_char_count = 0;
SET GLOBAL validate_password.check_user_name = 0;
ALTER USER 'user'@'localhost' IDENTIFIED BY 'pass';
FLUSH PRIVILEGES;

对我来说,在ubuntu新安装的mysqld上不起作用,必须添加这个:到/etc/mysql/mysql.conf.d/mysqld.cnf,否则服务器不会启动(猜测插件没有在正确的时间加载,当我只是添加它而没有plugin-load-add指令时)

plugin-load-add=validate_password.so
validate_password_policy=LOW
validate_password_length=8
validate_password_mixed_case_count=0
validate_password_number_count=0
validate_password_special_char_count=0

请设置满足7条MySql验证规则的密码

如:d_VX>N("xn_BrD2y

让验证标准更简单一点可以解决这个问题

SET GLOBAL validate_password_length = 6;
SET GLOBAL validate_password_number_count = 0;

但建议使用强密码是一个正确的解决方案

mysql> SET GLOBAL validate_password.policy = 0;

有些时候,找到一个快速的解决方案是很棒的。但如果你能避免降低密码限制,它可以让你在未来的大头疼。

下一个链接来自官方文档https://dev.mysql.com/doc/refman/5.6/en/validate-password.html,在那里他们暴露了一个完全像你的例子,他们解决了它。

唯一的问题是您的密码不够强,无法满足实际的最小策略(不建议删除)。所以你可以尝试不同的密码,就像你在例子中看到的那样。

SHOW VARIABLES LIKE 'validate_password%';

< img src = " https://i.stack.imgur.com/KoSXo.png " alt = " / >

mysql> SET GLOBAL validate_password.length = 6;
mysql> SET GLOBAL validate_password.number_count = 0;
mysql> SET GLOBAL validate_password.policy=LOW;
SHOW VARIABLES LIKE 'validate_password%';

< img src = " https://i.stack.imgur.com/SicFG.png " alt = " / >

如果mysql托管在aws上,只需卸载插件。从根用户火下面

UNINSTALL PLUGIN validate_password;

这个信息对上面所有的答案都很重要:当你重新启动mysql服务器时,所有的策略配置都将被重置,并将被丢失,所以 要让你的策略配置持久,你应该遵循以下说明:(在ubuntu服务器版本20.10上测试)
  1. 在mysql 洪阮回答中应用这些更改后
  2. sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
  3. 加上最后一行:
[mysqld]
#
# * Basic Settings
#
..
..
..
validate_password.policy = LOW   # <== this line
..
..
# IMPORTANT notes:
# - you can add more policy commands each by your needs.
# - notice the "." before "policy" , in some mysql versions is "_" , so be aware of that.
  1. 保存文件并重新启动mysql服务器:sudo service mysql restart

  2. Connect and check the persistence of your configuration:
    .输出说明 sudo mysql -u your_username -p
    show variables like "validate_pass%";
    结果应该像这样:

+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password.check_user_name    | ON    |
| validate_password.dictionary_file    |       |
| validate_password.length             | 6     |
| validate_password.mixed_case_count   | 1     |
| validate_password.number_count       | 0     |
| validate_password.policy             | LOW   |
| validate_password.special_char_count | 1     |
+--------------------------------------+-------+

我希望这能帮助到人们。

编辑:感谢@ahmednawazbutt:不要忘记FLUSH PRIVILEGES;

最好的选择是通过你的密码策略,并设置相应的密码。您可以通过运行以下命令检查现有的密码验证插件系统变量的值

mysql> SHOW VARIABLES LIKE 'validate_password%';

通过操作系统变量来减少安全策略从来都不是一个好做法。

你可以从官方文档,参考链接MySQL 5.6 MySQL 5.7 MySQL 8.0中阅读每个变量的详细信息及其用例

如果你想设置一个空白密码。然后在MySQL客户端中运行以下查询:

SET GLOBAL validate_password.check_user_name = No;
SET GLOBAL validate_password.dictionary_file = '';
SET GLOBAL validate_password.length = 0;
SET GLOBAL validate_password.mixed_case_count = 0;
SET GLOBAL validate_password.number_count = 0;
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.special_char_count = 0;

输出应该是这样的:

    SHOW VARIABLES LIKE 'validate_password%';


+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password.check_user_name    | ON    |
| validate_password.dictionary_file    |       |
| validate_password.length             | 0     |
| validate_password.mixed_case_count   | 0     |
| validate_password.number_count       | 0     |
| validate_password.policy             | LOW   |
| validate_password.special_char_count | 0     |
+--------------------------------------+-------+

然后,您可以使用以下查询更新您的空白密码:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';

这是phpmyadmin中的一个错误。启动mysql

sudo mysql -p

然后执行如下命令:

SET GLOBAL validate_password.policy = 0;

现在您可以更改密码了。如果你喜欢,你可以在它之后重置它:

SET GLOBAL validate_password.policy = MEDIUM;

(您可以使用低,中或高)

然后执行exit关闭mysql。

解找到在这里