方法1: 用SET PASSWORD命令
首先登录MySQL。
格式:mysql> set password for 用户名@localhost = password('新密码');
例子:mysql> set password for root@localhost = password('123');
方法2:用mysqladmin
格式:mysqladmin -u用户名 -p旧密码 password 新密码
例子:mysqladmin -uroot -p123456 password 123
方法3:用UPDATE直接编辑user表
首先登录MySQL。
mysql> use mysql;
mysql> update user set password=password('123') where user='root' and host='localhost';
mysql> flush privileges;
方法4:在忘记root密码的时候
以windows为例
在MySQL 8.0之前,MySQL使用的是validate_password插件检测、验证账号密码强度,保障账号的安全 性。
安装/启用插件方式1:在参数文件my.cnf中添加参数
[mysqld] plugin-load-add=validate_password.so \#ON/OFF/FORCE/FORCE_PLUS_PERMANENT: 是否使用该插件(及强制/永久强制使用) validate-password=FORCE_PLUS_PERMANENT
说明1: plugin library中的validate_password文件名的后缀名根据平台不同有所差异。 对于Unix和 Unix-like系统而言,它的文件后缀名是.so,对于Windows系统而言,它的文件后缀名是.dll。
说明2: 修改参数后必须重启MySQL服务才能生效。
说明3: 参数FORCE_PLUS_PERMANENT是为了防止插件在MySQL运行时的时候被卸载。当你卸载插 件时就会报错。如下所示。
mysql> SELECT PLUGIN_NAME, PLUGIN_LIBRARY, PLUGIN_STATUS, LOAD_OPTION -> FROM INFORMATION_SCHEMA.PLUGINS -> WHERE PLUGIN_NAME = 'validate_password'; +-------------------+----------------------+---------------+----------------------+ | PLUGIN_NAME | PLUGIN_LIBRARY | PLUGIN_STATUS | LOAD_OPTION | +-------------------+----------------------+---------------+----------------------+ | validate_password | validate_password.so | ACTIVE | FORCE_PLUS_PERMANENT | +-------------------+----------------------+---------------+----------------------+ 1 row in set (0.00 sec) mysql> UNINSTALL PLUGIN validate_password; ERROR 1702 (HY000): Plugin 'validate_password' is force_plus_permanent and can not be unloaded mysql>
安装/启用插件方式2:运行时命令安装(推荐)
mysql> INSTALL PLUGIN validate_password SONAME 'validate_password.so'; Query OK, 0 rows affected, 1 warning (0.11 sec)
此方法也会注册到元数据,也就是mysql.plugin表中,所以不用担心MySQL重启后插件会失效。
MySQL 8.0,引入了服务器组件(Components)这个特性,validate_password插件已用服务器组件重新实 现。8.0.25版本的数据库中,默认自动安装validate_password组件。 未安装插件前,执行如下两个指令 ,执行效果:
mysql> show variables like 'validate_password%'; Empty set (0.04 sec) mysql> SELECT * FROM mysql.component; ERROR 1146 (42S02): Table 'mysql.component' doesn't exist
安装插件后,执行如下两个指令 ,执行效果:
show variables like 'validate_password%';
+--------------------------------------+--------+ | Variable_name | Value | +--------------------------------------+--------+ | validate_password.check_user_name | ON | | validate_password.dictionary_file | | | validate_password.length | 8 | | validate_password.mixed_case_count | 1 | | validate_password.number_count | 1 | | validate_password.policy | MEDIUM | | validate_password.special_char_count | 1 | +--------------------------------------+--------+ 7 rows in set (0.01 sec)
关于 validate_password 组件对应的系统变量说明:
提示: 组件和插件的默认值可能有所不同。例如,MySQL 5.7. validate_password_check_user_name的默认 值为OFF。
修改安全策略
SET GLOBAL validate_password_policy=LOW; SET GLOBAL validate_password_policy=MEDIUM; SET GLOBAL validate_password_policy=STRONG; SET GLOBAL validate_password_policy=0; # For LOW SET GLOBAL validate_password_policy=1; # For MEDIUM SET GLOBAL validate_password_policy=2; # For HIGH #注意,如果是插件的话,SQL为set global validate_password_policy=LOW 此外,还可以修改密码中字符的长度 set global validate_password_length=1;
如果你创建密码是遇到“Your password does not satisfy the current policy requirements”,可以通过函数组 件去检测密码是否满足条件: 0-100。当评估在100时就是说明使用上了最基本的规则:大写+小写+特殊 字符+数字组成的8位以上密码
mysql> SELECT VALIDATE_PASSWORD_STRENGTH('medium'); +--------------------------------------+ | VALIDATE_PASSWORD_STRENGTH('medium') | +--------------------------------------+ | 25 | +--------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT VALIDATE_PASSWORD_STRENGTH('K354*45jKd5'); +-------------------------------------------+ | VALIDATE_PASSWORD_STRENGTH('K354*45jKd5') | +-------------------------------------------+ | 100 | +-------------------------------------------+ 1 row in set (0.00 sec)
注意:如果没有安装validate_password组件或插件的话,那么这个函数永远都返回0。 关于密码复杂度对 应的密码复杂度策略。如下表格所示:
卸载插件
mysql> UNINSTALL PLUGIN validate_password; Query OK, 0 rows affected, 1 warning (0.01 sec)
卸载组件
mysql> UNINSTALL COMPONENT 'file://component_validate_password'; Query OK, 0 rows affected (0.02 sec)