ChatGPT解决这个技术问题 Extra ChatGPT

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

我想使用以下语法在 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 级别

A
Akseli Palén

因为你的密码。您可以在 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 视频。
使用以下命令将“密码”用作开发机器的密码:SET GLOBAL validate_password_policy = 0;
SET GLOBAL validate_password.length = 6; SET GLOBAL validate_password.number_count = 0; 已更新!!
只是SET GLOBAL validate_password.policy = 0;
这很有帮助,因为它实际上向我展示了为什么我的 30 个字符长的密码“弱”(没有特殊字符)。我能够删除特殊字符要求并将最小长度从 8 增加到 20。
k
kennyut

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

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

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

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

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


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

如果您不关心密码策略是什么。您可以通过发出以下 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 推荐的内容
中而不是低
R
Rubyist

对于 MySQL 8*

SET GLOBAL validate_password.policy=LOW

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


J
Javasick

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

L
Leo Sammy

运行命令 sudo mysql_secure_installation 后。

运行 sudo mysql 进入 mysql 提示符。运行这个 SELECT user,authentication_string,plugin,host FROM mysql.user;检查用户 root 作为插件 auth_socket。然后运行卸载插件 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 以获得更多帮助


R
Rayees AC

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

R
Ryan

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

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

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

密码长度必须至少为 8 个字符

混合大小写计数为 1(至少 1 个小写字母和 1 个大写字母)

数字计数为 1

最小特殊字符数为 1

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

学生123@

NINZAcoder$100

演示通行证#00

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

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

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


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

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

A
Anurag Sahu

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

sudo mysql_secure_installation

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

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

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

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

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

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


在 MySQL 8 中没有这样的选项。
J
Jekayode

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

它为我修好了。


D
Dushan

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

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

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;

h
hizlan erpak

显示 'validate_password%' 之类的变量;

https://i.stack.imgur.com/KoSXo.png

mysql> SET GLOBAL validate_password.length = 6;

mysql> SET GLOBAL validate_password.number_count = 0;

mysql> SET GLOBAL validate_password.policy=LOW;

显示 'validate_password%' 之类的变量;

https://i.stack.imgur.com/SicFG.png


D
Durga prasad patra

如果您尝试设置空白密码。然后在 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 '';

m
mujuonly

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

例如:- d_VX>N("xn_BrD2y

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

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

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


C
CollinsKe
mysql> SET GLOBAL validate_password.policy = 0;

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

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

UNINSTALL PLUGIN validate_password;

B
Black

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

sudo mysql -p

然后执行这个命令:

SET GLOBAL validate_password.policy = 0;

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

SET GLOBAL validate_password.policy = MEDIUM;

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

然后执行exit关闭mysql。

找到解决方案 here


T
Tino Bellmann

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

K
Klaus

在 ubuntu 全新安装的 mysqld 上对我不起作用,必须添加:到 /etc/mysql/mysql.conf.d/mysqld.cnf 或服务器无法启动(猜插件没有加载我只是在没有插件加载添加指令的情况下添加它的正确时间)

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

C
Christian

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

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

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


s
sohaieb azaiez

在使用 mysql Hung Nguyen answer sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf 应用这些更改后,添加最后一行:

[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.

保存文件并重新启动 mysql 服务器: sudo service mysql restart 连接并检查配置的持久性: 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     |
+--------------------------------------+-------+

我希望这可以帮助人们。


P
PKSingh

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

mysql> SHOW VARIABLES LIKE 'validate_password%';

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

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