如何关闭 mysql 密码验证?

How do I turn off the mysql password validation?

看来我可能不小心在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

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

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

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

I would not recommend this solution for a production system. I used this solution on a local mysql instance for development purposes only.

你可以在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

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

根据 Sharfi 的回答,编辑 /etc/my.cnf 文件并仅添加这一行:

validate_password_policy=LOW

这应该足以消除 OP 要求的验证。在此更改之后,您可能希望重新启动 mysqld。根据您的 OS,它看起来像:

sudo service mysqld restart

validate_password_policy 取值 0、1 或 2 或与这些数字对应的单词 LOW、MEDIUM 和 STRONG。默认为 MEDIUM (1),要求密码至少包含一个大写字母、一个小写字母、一位数字和一个特殊字符,并且密码总长度至少为 8 个字符。按照我在这里的建议更改为 LOW 然后只会检查长度,如果它没有通过其他参数更改,将检查长度为 8。如果你也想缩短该长度限制,你也可以添加 validate_password_length 到 my.cnf 文件中。

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


对于 MySQL 8,属性 已从 "validate_password_policy" 更改为 "validate_password.policy"。有关最新信息,请参阅更新后的 mysql doc

如需破例,可套用以下"hack"。它需要对 mysql.plugin 系统 table.

具有 DELETE and INSERT 权限的用户
uninstall plugin validate_password;
SET PASSWORD FOR 'app' = PASSWORD('abcd');
INSTALL PLUGIN validate_password SONAME 'validate_password.so';

平淡无奇的安全免责声明:考虑一下,为什么要使密码更短或更简单,或许可以考虑将其替换为更复杂的密码。但是,我理解 "it's 3AM and just needs to work" 时刻,只是确保你不构建黑客系统,以免你自己被黑客攻击

进一步了解 ktbos 的回答:

我修改了mysqld.cnf文件,mysql启动失败。 原来是我修改错了文件!

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

validate_password_policy=LOW

这完美地解决了我的密码中不需要特殊字符的问题。

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

;plugin-load-add=cracklib_password_check.so

然后重启mariadb服务:

systemctl restart mariadb.service

对于 mysql 8.0,disable 密码验证组件的命令是:

UNINSTALL COMPONENT 'file://component_validate_password';

要重新安装,命令是:

INSTALL COMPONENT 'file://component_validate_password';

如果您只想change密码验证插件的策略:

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

我在 Ubuntu 18.04 Mysql 上遇到了问题。当我需要创建新用户时,策略总是很高。

我想出了如何禁用的方式,以供未来前来调查的同事使用。

以 root 身份登录 mysql 服务器

mysql -h localhost -u root -p

设置新的验证类型

SET GLOBAL validate_password_policy=0; //For Low

重启mysql

sudo service mysql restart

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

sudo bin/mysql_secure_installation

配置密码选项。

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;

不需要stop/startmysql

卸载:

mysql> uninstall plugin validate_password;

show plugins;

未显示已卸载的插件

安装:

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

配置禁用:

[mysqld]
validate_password = OFF

插件只有在安装后才能通过配置禁用。

在某些安装中,您必须重置 root 密码才能执行此命令。在执行此命令之前,您无法重置 root 密码。经典的第 22 条军规。

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

skip-validate_password=1

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

为了参考和未来,应该阅读这里的文档 https://dev.mysql.com/doc/mysql-secure-deployment-guide/5.7/en/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 部分,您将在重新启动时出错。

尽情享受吧!

回复你的问题:如何关闭mysql密码验证?

简答:您可以降低复杂性。

以 root 身份登录 Mysql 客户端。

set global validate_password.policy = LOW;
set global validate_password.length = 2;
set global validate_password.mixed_case_count = 0;
set global validate_password.number_count = 0;
set global validate_password.special_char_count = 0;

继续 create user ...

MySQL8 (但公平地说,技术上更好) 的情况有所不同。我放弃了尝试删除本地 MacOS 安装上的密码。所以,我意识到,如果你不能打败他们,那就加入他们吧!

这是我的快速粗略的解决方案:

  • 通过 HomeBrew 安装 MySQL8(默认情况下,安装为不安全)
  • 编辑了我的 ~/.zshrc (因为这是我使用的 shell。其他人可能会使用 .bash_profile 或其他)
    • nano ~/.zshrc
  • 添加了 2 条别名行
    • alias mysql='mysql -uroot'
    • alias mysqladmin='mysqladmin -uroot'
  • 推送更改
    • source ~/.zshrc

所以现在,不用担心使用 -u-p 标志,它们会自动用于 mysqlmysqladmin 命令。

仅供参考,如果您有密码,这也应该有效。您只需在别名中包含 -pPASSWORD 即可。 (例如:alias mysql='mysql -uroot -pPASSWORD'

此外,如果您使用任何其他 mysql 命令,您可以添加额外的别名行。

仅供参考:请勿在生产服务器上执行这些步骤。
我相信这是不言而喻的……但是,以防万一你不知道。