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


148

我想在mysql中使用以下语法创建一个新用户:

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

但是它返回一个错误:

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

我尝试了很多密码,但是它们不起作用。我怎样才能解决这个问题?


1
设置较低的密码策略级别。看看这里:dev.mysql.com/doc/refman/5.6/en/...
Fjarlaegur

4
您设置的密码策略是什么?您可以使用SHOW VARIABLES LIKE 'validate_password%'
JNevill

谢谢!我将密码策略级别设置为较低,并且可以正常工作。
Nguyen

1
我使用UNINSTALL COMPONENT 'file://component_validate_password';
princebillyGK

Answers:


244

由于您的密码。您可以在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文档


31
看在眼前,您应该引用MySQL的官方文档,而不是YouTube视频。
罗恩侯爵,

26
使用以下命令将“ password”用作开发机的密码:SET GLOBAL validate_password_policy = 0;
Mahmudul Hasan Shohag,

4
SET GLOBAL validate_password.length = 6; SET GLOBAL validate_password.number_count = 0; 更新!!
BeatingBytes

6
只是SET GLOBAL validate_password.policy = 0;
iamtodor

1
这很有用,因为它实际上向我显示了为什么我的30个字符长的密码“弱”(没有特殊字符)。我能够删除特殊字符要求,并将最小长度从8增加到
20。– andrewtweber

68

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

当我运行“ mysql_secure_installation”并将密码安全级别修改为“中”时,我遇到了同样的问题。

我通过运行以下命令绕过了错误:

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

确保必要时重新安装插件“ validate_password”。


3
糟糕的解决方案。您应该将级别降低到适合您的水平,而不是删除整个设施。
罗恩侯爵,

10
感谢您的发布。快速而肮脏的修复。就像@kennyut所说的那样:确保您重新安装插件“ validate_password”
Meng Zhao

52

如果您不在乎密码策略是什么。您可以通过发出以下mysql命令将其设置为LOW:

mysql> SET GLOBAL validate_password_policy=LOW;

8
应该SET GLOBAL validate_password.policy=LOW;改为
songyy


20

运行命令后sudo mysql_secure_installation

  1. 运行sudo mysql进入mysql提示符。
  2. 运行此命令SELECT user,authentication_string,plugin,host FROM mysql.user;以检查root用户作为插件auth_socket
  3. 然后uninstall plugin validate_password;在运行此命令之前先运行以删除特权,ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';请确保将密码更改为强密码。

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


11

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

以root身份登录

mysql -u root -p

变更政策

SET GLOBAL validate_password_policy=LOW;

要么

SET GLOBAL validate_password_policy=0;

出口

exit

重启MySQL服务

sudo service mysqld 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;

8

对于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;

7

我认为将“ validate_password_policy”设置为“ low”或卸载“ validate password plugin”不是正确的选择。您绝不能损害数据库的安全性(除非您不在乎)。我想知道为什么当您只需选择一个好的密码时,人们甚至会建议这些选项。

为了克服这个问题,我在mysql中执行了以下命令:@JNevill建议显示类似SHOW VARIABLES'validate_password%'的命令。我的“ validate_password_policy”与其他内容一起设置为“中”。这是其执行的屏幕截图:验证密码策略

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

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

因此,必须遵守有效的密码策略。上述规则的有效密码示例如下:

  • 学生123 @
  • NINZAcoder $ 100
  • demoPass#00

您可以选择符合政策的任何组合。

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

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


2
顶级密码策略非常严格。
Steam游戏玩家

我也不理解有人建议降级validate_password_policyLOW。用户可以完美地创建或生成满足要求的强密码。如果不确定如何做,请使用工具。例如github.com/joseluisq/rpasswd
joseluisq

3

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

SHOW VARIABLES LIKE 'default_authentication_plugin';

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

SHOW VARIABLES LIKE 'validate_password%';

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

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

3

我遇到了同样的问题,答案就在您的面前,还记得安装mysql时运行脚本时

sudo mysql_secure_installation

在某处您选择了想要选择的密码类型

密码验证策略分为三个级别:

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

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

您必须输入相同策略的密码

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


2

对于使用MySQL 8.0.x遇到此问题的Laravel用户,请添加

'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',
            ],
        ],
    ],

它为我解决了。


2

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

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

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_policylow。拥有MediumHigh不允许拥有不太安全的密码。将其设置为low以下代码。

SET GLOBAL validate_password_policy=LOW;

1

设置满足7个MySQL验证规则的密码

例如:- d_VX>N("xn_BrD2y

使验证标准更简单将解决此问题

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

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


0

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

“选择密码('123456789')”

或者如果

“选择密码('A123456789')”

或者如果

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

如果您输入

“选择密码('A!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

0

在mysqld的ubuntu全新安装上对我不起作用,必须将其添加到/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

0

在某些情况下,找到快速解决方案非常重要。但是,如果您可以避免降低密码限制,则可以避免将来头疼。

下一个链接来自官方文档https://dev.mysql.com/doc/refman/5.6/en/validate-password.html,在该文档中,他们公开了一个与您的示例完全相同的示例,并对其进行了解决。

您唯一的问题是您的密码强度不足以满足实际的最小策略(不建议删除)。因此,您可以尝试不同的密码,如示例所示。


0

显示变量,如“ validate_password%”;

在此处输入图片说明

mysql> SET GLOBAL validate_password.length = 6;

mysql> SET GLOBAL validate_password.number_count = 0;

mysql> SET GLOBAL validate_password.policy = LOW;

显示变量,如“ validate_password%”;

在此处输入图片说明


-1
mysql> SET GLOBAL validate_password.policy = 0;

1
尽管此代码可以解决OP的问题,但最好包含有关您的代码如何解决OP的问题的说明。这样,将来的访问者可以从您的帖子中学习,并将其应用于自己的代码。SO不是编码服务,而是知识资源。而且,更可能会推荐高质量,完整的答案。这些功能以及所有职位必须自成体系的要求,是SO作为平台的强项,可以将其与论坛区分开。您可以编辑以添加其他信息和/或在源文档中补充说明。
SherylHohman
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.