我想在MySQL中创建一个新用户,语法如下:
create user 'demo'@'localhost' identified by 'password';
但是它会返回一个错误:
您的密码不符合当前策略要求。
我试过很多密码,但都没用。我该如何解决这个问题?
我想在MySQL中创建一个新用户,语法如下:
create user 'demo'@'localhost' identified by 'password';
但是它会返回一个错误:
您的密码不符合当前策略要求。
我试过很多密码,但都没用。我该如何解决这个问题?
当前回答
如果mysql托管在aws上,只需卸载插件。从根用户火下面
UNINSTALL PLUGIN validate_password;
其他回答
注意:这可能不是一个安全的解决方案。但是如果您正在测试环境中工作,只需要快速修复,甚至不关心安全设置。这是一个快速的解决方案。
当我运行“mysql_secure_installation”并将密码安全级别修改为“中等”时,同样的问题发生在我身上。
我通过运行以下程序绕过了这个错误:
mysql -h localhost -u root -p
mysql>uninstall plugin validate_password;
如果需要,请确保重新安装插件“validate_password”。
此错误消息与表中存储的密码无关。如果键入(在SQL控制台上),也会出现这种情况
“选择密码(“123456789”)”
或者,如果
“select密码(’A123456789’)”
或者,如果
“select 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
在我看来,设置“validate_password_policy”为“low”或卸载“验证密码插件”是不正确的事情。永远不要牺牲数据库的安全性(除非你真的不在乎)。我想知道为什么人们甚至建议这些选项,当你可以选择一个好的密码。
为了克服这个问题,我在mysql中执行了以下命令:根据@JNevill的建议,SHOW VARIABLES LIKE 'validate_password%'。我的“validate_password_policy”被设置为Medium,还有其他一些东西。以下是其执行的截图:验证密码策略
结果是不言自明的。对于有效密码(当“密码策略”为“中”时):
密码长度至少为8个字符 混合大小写计数为1(至少1个小写字母和1个大写字母) Number count是1 最小特殊字符数为1
因此,有效的密码必须遵守策略。以上规则的有效密码示例可能是:
Student123@ NINZAcoder 100美元 点demoPass #
您可以选择任何组合,只要它满足策略。
对于其他“validate_password_policy”,您可以简单地查看不同选项的值并相应地选择您的密码(我没有尝试过“STRONG”)。
https://dev.mysql.com/doc/refman/5.6/en/validate-password-options-variables.html
对于Laravel用户在MySQL 8.0中遇到此问题。x,添加
'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',
],
],
],
它帮我解决了问题。
SHOW VARIABLES LIKE 'validate_password%';
mysql> SET GLOBAL validate_password.length = 6;
mysql> SET GLOBAL validate_password.number_count = 0;
mysql> SET GLOBAL validate_password.policy=LOW;
SHOW VARIABLES LIKE 'validate_password%';