我想使用以下语法在 MySQL 中创建一个新用户:
create user 'demo'@'localhost' identified by 'password';
但它返回一个错误:
您的密码不满足当前的政策要求。
我尝试了很多密码,但它们都不起作用。我怎样才能解决这个问题?
SHOW VARIABLES LIKE 'validate_password%'
检查已为密码验证模块设置的变量
UNINSTALL COMPONENT 'file://component_validate_password';
解决了我的问题
因为你的密码。您可以在 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_secure_installation”并将密码安全级别修改为“中”时,同样的问题发生在我身上。
我通过运行以下命令绕过了错误:
mysql -h localhost -u root -p
mysql>uninstall plugin validate_password;
确保在必要时重新安装插件“validate_password”。
如果您不关心密码策略是什么。您可以通过发出以下 mysql 命令将其设置为 LOW:
mysql> SET GLOBAL validate_password.length = 4;
mysql> SET GLOBAL validate_password.policy=LOW;
SET GLOBAL validate_password.policy=LOW;
对于 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;
运行命令 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 以获得更多帮助
您必须将 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;
在我看来,将“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
第 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';
我有同样的问题,答案就在你面前,记住当你在安装 mysql 时运行脚本时
sudo mysql_secure_installation
在某处您选择了您想选择的密码类型
密码验证策略分为三个级别:
LOW 长度 >= 8 MEDIUM 长度 >= 8,数字、混合大小写和特殊字符 STRONG 长度 >= 8,数字、混合大小写、特殊字符和字典文件
请输入 0 = 低、1 = 中和 2 = 强:
您必须为相同的策略提供密码
以下是一些密码示例:
类型 0:abcdabcd
类型 1:abcd1234
类型 2:ancd@1234
对于在 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%';
然后在您的矩阵中,您可以在下面找到具有相应值的变量,并且您必须在其中检查 validate_password_length
、validate_password_number_count
和 validate_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
。将其设为 Medium
或 High
不会允许您使用不太安全的密码。通过以下代码将其设置为 low
。
SET GLOBAL validate_password_policy=LOW;
显示 '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
如果您尝试设置空白密码。然后在 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 '';
设置满足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;
如果 mysql 托管在 aws 上,只需卸载插件。从下面的root用户火
UNINSTALL PLUGIN validate_password;
这是 phpmyadmin 中的一个错误。启动mysql
sudo mysql -p
然后执行这个命令:
SET GLOBAL validate_password.policy = 0;
现在您可以更改密码了。如果你喜欢,你可以在它之后重置它:
SET GLOBAL validate_password.policy = MEDIUM;
(您可以使用低、中或高)
然后执行exit
关闭mysql。
找到解决方案 here。
此错误消息与表中存储的密码无关。如果您键入(在 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
在 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
在某些时候,找到一个快速的解决方案是很棒的。但是如果你能避免降低密码限制,它可以让你在未来不再头疼。
下一个链接来自官方文档 https://dev.mysql.com/doc/refman/5.6/en/validate-password.html,他们在其中公开了一个与您的示例完全相同的示例,并且他们解决了这个问题。
您遇到的唯一问题是您的密码强度不足以满足实际的最低策略(不建议删除)。因此,您可以尝试不同的密码,如示例中所示。
在使用 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 |
+--------------------------------------+-------+
我希望这可以帮助人们。
不定期副业成功案例分享
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;