如何关闭mysql密码验证?


153

看来我可能无意中在MySQL 5.7中加载了密码验证插件。这个插件似乎强制所有密码遵守某些规则。

我想关闭此功能。

我尝试按照这里的建议将validate_password_length变量更改为无效。

mysql> SET GLOBAL validate_password_length=4;
Query OK, 0 rows affected (0.00 sec)

mysql> SET PASSWORD FOR 'app' = PASSWORD('abcd');
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

我想卸载插件或以某种方式中和它。


9
您是否尝试过更改策略设置?SET GLOBAL validate_password_policy=LOW;
Rikki

1
SET GLOBAL validate_password.policy=LOW;
比利时

Answers:


430

这是我删除验证密码插件的方法:

  1. 以root身份登录到mysql服务器 mysql -h localhost -u root -p
  2. 运行以下sql命令: uninstall plugin validate_password;
  3. 如果最后一行不起作用(新的mysql版本),则应执行 UNINSTALL COMPONENT 'file://component_validate_password';

我不建议将此解决方案用于生产系统。我在本地mysql实例上使用此解决方案仅出于开发目的。


18
要重新启用它,请使用以下命令: INSTALL PLUGIN validate_password SONAME 'validate_password.so';
vchrizz

8
要删除该插件,您需要至少通过grep 'password' /var/log/mysqld.log | tail -1和然后设置一个安全密码/usr/bin/mysql_secure_installation。这样做之后,您可以从上面的srayhunter运行命令,然后运行mysqladmin -u root -p'oldpassword' password newpass以使用您想要的任何密码。
specialk1st

2
该插件cracklib_password_check在当前的MariaDB中被调用。
czerny

27
注意:在MySQL 8.0.4中,validate_password插件被重新实现为validate_password组件。代替上面的#2查询,运行:UNINSTALL COMPONENT 'file://component_validate_password';
Aaron Cicali

4
mysql> SET GLOBAL validate_password_policy = 0;
JREAM '18

41

我正在使用MySQL v 8.0.12,禁用密码验证组件的命令是:

UNINSTALL COMPONENT 'file://component_validate_password';

要重新安装它,命令是:

INSTALL COMPONENT 'file://component_validate_password';

如果您只想更改密码验证插件的策略,请执行以下操作:

SET GLOBAL validate_password.policy = 0;   // For LOW
SET GLOBAL validate_password.policy = 1;   // For MEDIUM
SET GLOBAL validate_password.policy = 2;   // For HIGH

34

以Sharfi的答案为基础,编辑/etc/my.cnf文件并仅添加以下一行:

validate_password_policy=LOW

按照OP的要求,这应该足够使验证无效。进行此更改后,您可能希望重新启动mysqld。根据您的操作系统,它看起来像:

sudo service mysqld restart

validate_password_policy取值为0、1或2或对应于这些数字的单词LOW,MEDIUM和STRONG。缺省值为MEDIUM(1),它要求密码至少包含一个大写字母,一个小写字母,一位数字和一个特殊字符,并且密码总长度至少为8个字符。如我在此处建议更改为LOW,那么仅将检查长度,如果未通过其他参数进行更改,则将检查长度为8。如果您也想缩短该长度限制,也可以在其中添加validate_password_length my.cnf文件。

有关级别和详细信息的更多信息,请参见mysql doc


对于MySQL 8,该属性已从“ validate_password_policy”更改为“ validate_password.policy”。有关最新信息,请参见更新的mysql文档


6
如果您只需要临时更改,以允许设置一个密码,则可以使用SET GLOBAL validate_password_policy=LOW;
Rikki

1
这是比卸下模块本身更好的解决方案。
Mrugesh Mistry '18

2
mysql:未知变量'validate_password_policy =
LOW'– Amalgovinus

2
看起来变量名在最新的MySQL中已更改。@Amalgovinus,尝试改用变量名“ validate_password.policy”,看看是否适合您。如果可以,我将更新答案。
ktbos

6

要在mariadb-10.1.24(Fedora 24)中禁用密码检查,我必须在/etc/my.cnf.d/cracklib_password_check.cnf文件中的一行注释掉:

;plugin-load-add=cracklib_password_check.so

然后重新启动mariadb服务:

systemctl restart mariadb.service

4

您可以在mysql配置文件打开/etc/my.cnf文件中配置此文件。在此文件中,所有配置密码策略的行都将其注释为

#validate-password=FORCE_PLUS_PERMANENT
#validate_password_length=10
#validate_password_mixed_case_count=1
#validate_password_number_count=1
#validate_password_policy=MEDIUM

取消注释并更改要更改的属性的值。


2

如果要设置例外,可以应用以下“ hack”。它需要与用户DELETEINSERT对特权mysql.plugin系统表。

uninstall plugin validate_password;
SET PASSWORD FOR 'app' = PASSWORD('abcd');
INSTALL PLUGIN validate_password SONAME 'validate_password.so';

无味的安全免责声明:请考虑一下,为什么要使密码更短或更容易,并且也许考虑用更复杂的密码代替它。但是,我了解“现在是凌晨3点,只需要工作”这一刻,请确保您没有构建黑客系统,以免您自己被黑客入侵


2

除了ktbos的答案:

我修改了mysqld.cnf文件,但mysql无法启动。原来我正在修改错误的文件!

因此,请确保您修改的文件包含段标记,例如[mysqld_safe]和[mysqld]。在后者下,我按照建议进行操作并添加了以下行:

validate_password_policy=LOW

这样可以很好地解决我的问题,即密码中不需要特殊字符。


1

卸载:

mysql> uninstall plugin validate_password;

卸载的插件不会显示 show plugins;

安装:

mysql> install plugin validate_password SONAME 'validate_password.so';

被配置禁用:

[mysqld]
validate_password = OFF

只有安装了插件,才能通过配置禁用它。


0

我在Mysql的Ubuntu 18.04上遇到问题。当我需要创建新用户时,该策略始终很高。

对于未来来调查的同事,我想出了禁用的方法设置为低。

以root身份登录到mysql服务器

mysql -h localhost -u root -p

设置新的验证类型

SET GLOBAL validate_password_policy=0; //For Low

重启mysql

sudo service mysql restart

1
您必须将此“ SET ...”命令写入mysql shell。不要猛击外壳。
kodmanyagha

0

在某些安装中,只有在重置根密码后才能执行此命令。在执行此命令之前,您无法重置root密码。经典接球22。

其他响应者未提及的一种解决方案是通过mysql配置暂时禁用该插件。在my.cnf[mysqld]部分的any 中,添加:

skip-validate_password=1

并重新启动服务器。更改密码,然后将值设置回0,然后再次重新启动。


这行不通。您能提及这适用于哪个mysql版本吗?
Dave Doga Oz

0

为了参考和将来,请在此处阅读文档https://dev.mysql.com/doc/mysql-secure-deployment-guide/5.7/zh-CN/secure-deployment-password-validation.html

然后,您应该编辑mysqld.cnf文件,例如:

vim /etc/mysql/mysql.conf.d/mysqld.cnf

然后,在[mysqld]部分中添加以下内容:

plugin-load-add=validate_password.so
validate_password_policy=LOW

基本上,如果您编辑默认值,它将类似于:

[mysqld]
#
# * Basic Settings
#
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
plugin-load-add=validate_password.so
validate_password_policy=LOW

然后,您可以重新启动:

systemctl restart mysql

如果您忘记了该plugin-load-add=validate_password.so零件,则重启时会出错。

请享用 !


-1

对于mysql 8.0.7,转到您的mysql目录,然后使用:

sudo bin/mysql_secure_installation

配置密码选项。


-2
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'organizer'@'localhost'  WITH GRANT OPTION;

CREATE USER 'username'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'organizer'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

无需停止/启动mysql

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.