【问题标题】:Your password does not satisfy the current policy requirements您的密码不符合当前政策要求
【发布时间】:2017-08-23 00:18:30
【问题描述】:

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

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

但是它返回一个错误:

您的密码不满足当前的政策要求。

我尝试了很多密码,但都不起作用。我该如何解决这个问题?

【问题讨论】:

  • 设置密码策略级别较低。看这里:dev.mysql.com/doc/refman/5.6/en/…
  • 你设置的密码策略是什么?您可以使用SHOW VARIABLES LIKE 'validate_password%' 检查已为您的密码验证模块设置的变量
  • 谢谢!我将密码策略级别设置得较低,它可以工作。
  • 我使用UNINSTALL COMPONENT 'file://component_validate_password';解决了我的问题
  • @Nguyen 发生这种情况是因为根据您的 validate_password.policy,您为用户提供的密码不够强。输入您想要的强密码,而不是“密码”。具有讽刺意味的是,每个人都建议您更改 validate_password.policy 级别

标签: mysql passwords


【解决方案1】:

因为您的密码。您可以在 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 Documentation

【讨论】:

  • 看在上帝的份上,你应该引用官方MySQL documentation,而不是 YouTube 视频。
  • 使用下面的命令来使用'password'作为开发机器的密码:SET GLOBAL validate_password_policy = 0;
  • SET GLOBAL validate_password.length = 6; SET GLOBAL validate_password.number_count = 0; uPDATED!!
  • 只是SET GLOBAL validate_password.policy = 0;
  • 这很有帮助,因为它实际上向我展示了为什么我的 30 个字符长的密码是“弱”(没有特殊字符)。我能够删除特殊字符要求并将最小长度从 8 增加到 20。
【解决方案2】:

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

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

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

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

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

【讨论】:

  • 糟糕的解决方案。您应该将级别降低到适合您的水平,而不是移除整个设施。
  • 感谢发帖。快速而肮脏的修复。正如@kennyut 所说:确保重新安装插件“validate_password”
  • @user207421 开发机器上的mysql没有密码有什么问题?除非你在那里存储有价值的东西(在 mysql 中)。禁用验证甚至不如没有密码那么严重。
【解决方案3】:

运行命令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 以获得更多帮助

【讨论】:

    【解决方案4】:

    第 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';
    

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

      • 应该改为SET GLOBAL validate_password.policy=LOW;
      • 对于 MySQL 8,该属性已从“validate_password_policy”更改为“validate_password.policy”。对于较低版本,它仍然是“validate_password_policy”
      • mysql> SET GLOBAL validate_password_policy=LOW;它对我有用。
      • 你真的应该把它留在 mysql7 的原样,并限定从 mysq8 到它已更改为 songyy 推荐的内容
      • 中而不是低
      【解决方案6】:

      对于 MySQL 8*

      SET GLOBAL validate_password.policy=LOW

      解释政策的参考链接 - Click Here

      【讨论】:

        【解决方案7】:

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

        【讨论】:

          【解决方案8】:

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

          sudo mysql_secure_installation

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

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

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

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

          您必须为相同的策略提供密码

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

          【讨论】:

          • 在 MySQL 8 中没有这样的选项。
          【解决方案9】:

          在我看来,将 "validate_password_policy" 设置为 "low" 或卸载“验证密码插件”是不正确的做法。您绝不能在数据库的安全性上妥协(除非您真的不在乎)。我想知道为什么人们甚至在您可以选择一个好的密码时建议这些选项。

          为了克服这个问题,我在 mysql 中执行了以下命令:SHOW VARIABLES LIKE 'validate_password%' 正如@JNevill 所建议的那样。我的“validate_password_policy”设置为中等,以及其他内容。这是它的执行截图:Validate Password Policy

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

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

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

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

          只要符合政策,您可以选择任意组合。

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

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

          【讨论】:

          • 顶级密码策略非常强大。
          • 我也不明白有人建议将validate_password_policy 降级为LOW。用户可以完美地创建或生成满足要求的强密码。如果您不确定该怎么做,请使用工具。例如github.com/joseluisq/rpasswd
          • 政策没有解释。所以你只是在猜测它是什么。就我而言,我正在生成一组随机字符,无论它多么狂野,“它不符合要求”
          • 我尝试安装 phpmyadmin。我将策略设置为中等,并且我的密码满足了策略(我刚刚检查了三次)。它仍然抛出了同样的错误。即使它应该自己生成一个随机的(“如果留空”)。
          【解决方案10】:

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

          它为我修好了。

          【讨论】:

            【解决方案11】:

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

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

            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;
            

            【讨论】:

              【解决方案12】:

              您必须将 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;
              

              【讨论】:

                【解决方案13】:

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

                【讨论】:

                  【解决方案14】:

                  在 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
                  

                  【讨论】:

                    【解决方案15】:

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

                    例如:- d_VX&gt;N("xn_BrD2y

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

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

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

                    【讨论】:

                      【解决方案16】:
                      mysql> SET GLOBAL validate_password.policy = 0;
                      

                      【讨论】:

                      • 虽然此代码可以解决 OP 的问题,但最好包含关于您的代码如何解决 OP 问题的说明。这样,未来的访问者可以从您的帖子中学习,并将其应用到他们自己的代码中。 SO 不是编码服务,而是知识资源。此外,高质量、完整的答案更有可能获得支持。这些功能,以及所有帖子都是独立的要求,是 SO 作为一个平台的一些优势,使其与论坛区分开来。您可以编辑以添加其他信息和/或使用源文档补充您的解释。
                      【解决方案17】:

                      在某些情况下,找到快速解决方案非常有用。但是,如果你能避免降低密码限制,它可以让你在未来不那么头疼。

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

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

                      【讨论】:

                        【解决方案18】:

                        显示变量,如“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%”;

                        【讨论】:

                          【解决方案19】:

                          如果 mysql 托管在 aws 上,只需卸载插件即可。从下面的root用户开火

                          UNINSTALL PLUGIN validate_password;
                          

                          【讨论】:

                            【解决方案20】:

                            此信息对上述所有答案都很重要:当您重新启动 mysql 服务器时,所有策略配置都将被重置并且将丢失,所以 要使您的策略配置持久化,您应该遵循以下说明:(在 ubuntu 服务器版本 20.10 上测试)
                            1. 在使用 mysql Hung Nguyen answer 应用这些更改之后
                            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. 连接并检查配置的持久性:
                              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     |
                            +--------------------------------------+-------+
                            

                            我希望这可以帮助人们。

                            【讨论】:

                              【解决方案21】:

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

                              mysql> SHOW VARIABLES LIKE 'validate_password%';
                              

                              通过操纵系统变量来减少安全策略从来都不是一个好习惯。

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

                              【讨论】:

                                猜你喜欢
                                • 2020-09-15
                                • 2021-08-05
                                • 2021-04-26
                                • 1970-01-01
                                • 1970-01-01
                                • 2020-11-05
                                • 2020-12-14
                                • 2023-01-05
                                • 1970-01-01
                                相关资源
                                最近更新 更多