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

Mysql 您的密码不符合当前的策略要求,mysql,passwords,Mysql,Passwords,我想用以下语法在mysql中创建一个新用户: create user 'demo'@'localhost' identified by 'password'; 但它返回一个错误: 您的密码不符合当前的策略要求 我试过很多密码,但都不起作用。如何修复此问题?因为您的密码。您可以使用MySQL客户端中的以下查询查看密码验证配置指标: 显示变量,如“验证密码%”; 输出应该是这样的: +--------------------------------------+-------+ | Variab

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

create user 'demo'@'localhost' identified by 'password';
但它返回一个错误:

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


我试过很多密码,但都不起作用。如何修复此问题?

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

显示变量,如“验证密码%”;
输出应该是这样的:

+--------------------------------------+-------+
| 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\u安全安装”并将密码安全级别修改为“中等”时,同样的问题也发生在我身上

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

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

如有必要,请确保重新安装插件“验证密码”。

在运行命令
sudo mysql\u secure\u installation

  • 运行
    sudomysql
    进入mysql提示符
  • 运行此
    从mysql.user中选择用户、身份验证字符串、插件、主机
    检查用户root是否具有插件身份验证套接字
  • 然后运行
    卸载插件验证密码在运行前删除特权
    这
    将用户“root”@“localhost”用“password”替换为mysql_native_密码确保将密码更改为强密码

  • 注意:查看此链接以获取更多帮助

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

    SHOW VARIABLES LIKE 'default_authentication_plugin';
    
    步骤2:满足密码验证要求

    SHOW VARIABLES LIKE 'validate_password%';
    
    CREATE USER '<your_user>'@'localhost' IDENTIFIED WITH '<your_default_auth_plugin>' BY 'password';
    
    步骤3:使用正确的密码要求设置用户

    SHOW VARIABLES LIKE 'validate_password%';
    
    CREATE USER '<your_user>'@'localhost' IDENTIFIED WITH '<your_default_auth_plugin>' BY 'password';
    
    创建用户“”@'localhost',通过“密码”标识为“”;
    
    如果您不关心密码策略是什么。您可以通过发出以下mysql命令将其设置为低:


    mysql>设置全局验证密码策略=低

    对于MySQL 8*


    SET GLOBAL validate\u password.policy=LOW


    解释策略的参考链接-

    此错误消息与表中存储的密码无关。如果键入(在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
    

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

    sudo mysql\u安全安装

    您在某个地方选择了要选择的密码类型

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

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

    请输入0=低、1=中等和2=强:

    您必须为同一策略提供密码

    下面是一些密码示例:
    对于类型0:
    abcdabcd

    对于类型1:
    abcd1234


    对于类型2:
    ancd@1234

    在我看来,将“验证密码”策略设置为“低”或卸载“验证密码插件”不是正确的做法。您决不能破坏数据库的安全性(除非您真的不在乎)。我想知道为什么人们甚至建议这些选项,而你只是可以选择一个好的密码

    为了解决这个问题,我在mysql中执行了以下命令:显示@JNevill建议的变量,如“validate_password%”。我的“验证密码策略”与其他内容一起设置为“中”。以下是其执行的屏幕截图:

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

    • 密码长度必须至少为8个字符
    • 混合案例计数为1(至少1个小写字母和1个大写字母)
    • 计数为1
    • 最小特殊字符数为1
    因此,有效密码必须遵守该策略。上述规则的有效密码示例可能包括:

    • 学生123@
    • NINZAcoder 100美元
    • demoPass#00
    只要满足策略,就可以选择任何组合

    对于其他“验证密码\u策略”,您只需查看不同选项的值,并相应地选择您的密码(我没有尝试过“strong”


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

    它为我解决了问题。

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

    您只需键入以下代码即可查看密码验证配置矩阵

    mysql-> SHOW VARIABLES LIKE 'validate_password%';
    
    SET GLOBAL validate_password_length = 6;
    
    SET GLOBAL validate_password_number_count = 0;
    
    然后在您的矩阵中,您可以找到以下具有相应值的变量,您必须在其中检查
    验证密码长度
    验证密码数量
    验证密码策略

    检查用于这些变量的值。确保您的
    validate\u password\u length
    不应大于6。您可以使用下面的代码将其设置为6

    mysql-> SHOW VARIABLES LIKE 'validate_password%';
    
    SET GLOBAL validate_password_length = 6;
    
    SET GLOBAL validate_password_number_count = 0;
    
    在这之后,您需要将
    validate\u password\u number\u count
    设置为0。使用下面的代码来完成

    mysql-> SHOW VARIABLES LIKE 'validate_password%';
    
    SET GLOBAL validate_password_length = 6;
    
    SET GLOBAL validate_password_number_count = 0;
    
    最后,您必须将
    validate\u password\u policy
    设置为
    low
    。哈
    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
    
    SET GLOBAL validate_password_length = 6;
    SET GLOBAL validate_password_number_count = 0;
    
    mysql> SET GLOBAL validate_password.policy = 0;
    
    UNINSTALL PLUGIN validate_password;
    
    [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.
    
    +--------------------------------------+-------+
    | 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     |
    +--------------------------------------+-------+