MySQL 5.7版本开始,增强密码验证机制,网上说安装的时候会在/root/.mysql_secret  文件中生成默认密码,这一点自 5.7.6版本以后也去掉了。

针对如果生成默认密码,网上有一个版本,内容如下:

1、修改配置文件,一般在 /etc/my.cnf, 在[mysqld]字段下增加skip-grant-tables 字段,用以忽略权限验证;

2、重启MySQL服务器,CentOS 7.0操作命令是:

1
systemctl restart mysqld.service

3、使用mysql -u root -p 登录数据, 密码直接回车;

4、修改mysql数据库(名称),user表的authentication_string字段,修改命令如下:

1
2
3
mysql> update mysql.user set authentication_string=password('new_password') where user='root' and Host ='localhost';
mysql> flush privileges;
mysql> quit;

5、修改配置文件,去掉skip-grant-tables,恢复成原来的样子, 然后重新MySQL服务器。

6、使用第4步设置的密码,登录mysql服务器。

7、通过 set password=password('new_password'); 命令重新设置密码;


以上的方法,在MySQL 5.7早期版本时,还是很好用的,但在MySQL 5.7.6以后的版本,最后一点重置密码总是无法生效,会出来下面的错误。

1
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

同时,无法进行其它的操作。

这是因为,自MySQL 5.7开始,密码存在有效期的概念, 同时因为安全等级的问题,需要使用使用其它的方式进行设置。另一个需要注意的点是, 自5.7.6开始废弃了password()函数,同时无法设置old_password=1, 这真的是一件比较曲折的探索过程。

那么,先把MySQL 5.7.9版本以上的密码设置方法整理一下。

大部分和上面整理的内容相同,关键在第4步后,把authentication_string 里写入的值记一下(这是因为password()函数已废弃)

通过使用以下命令,代替第7步的, set password=password('new_password') 方法。

1
2
3
4
mysql> ALTER USER 'jeffrey'@'localhost'
    -> IDENTIFIED WITH mysql_native_password
    -> AS 'authentication_string字段内容';
Query OK, 0 rows affected (0.01 sec)

其实上面的命令有一个简化版本,命令如下

1
2
3
mysql> ALTER USER USER() IDENTIFIED BY 'news_password';
 
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

之所以会出现上面的错误信息,这和密码的安全等级相关,查看安全等级命令如下

1
2
3
4
5
6
7
8
9
10
11
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| 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      |
+--------------------------------------+--------+

通过  SET GLOBAL  validate_password_policy='LOW';  命令,降低安全等级后,就可以直接使用,限制是必须8个字符以上;

关于安全等级更详细的介绍如下

  • LOW 政策只测试密码长度。 密码必须至少有8个字符长。

  • MEDIUM 政策的条件 密码必须包含至少1数字字符,1 大写和小写字符,和1特别 (nonalphanumeric)字符。

  • STRONG 政策的情况 密码子字符串长度为4的或更长时间不能匹配 单词在字典文件中,如果一个人被指定。

最后,为了解决密码失效的问题, 最后在配置文件的[mysqld]字段下,增加以下字段

1
2
[mysqld]
default_password_lifetime=0

也可以通过命令行进行设置

1
ALTER USER 'script'@'localhost' PASSWORD EXPIRE NEVER

关于密码有效期相关的更多信息,可以参考 http://dev.mysql.com/doc/refman/5.7/en/password-expiration-policy.html

好了,希望上面的信息能够对大家所有帮助。

最新文章

  1. C/C++技术常用网站
  2. HDU 1710
  3. 关于Thread.currentThread()和this的差异
  4. python 局部变量和全局变量 global
  5. NopCommerce之任务执行
  6. html5 filereader读取流注意事项
  7. a+b(高精度)[陈涛]——c语言
  8. 2015.4.10-SQL 高级查询(二)
  9. LaTeX 多个图片共用一个题注的实现--子图形
  10. mysql \N 的疑惑
  11. three.js的wave特效(ivew官网首页波浪特效实现)
  12. MySQL中Identifier Case Sensitivity
  13. NetCore+MySql+EF 数据库生成实体模型
  14. 使用jQuery插件时避免重复引入jquery.js文件
  15. RCNN--目标检测
  16. java后端导出excel表格
  17. kafaka学习
  18. Linux文件系统性能优化
  19. ONVIF开发实例
  20. [Django学习]视图

热门文章

  1. Linux的fasync驱动异步通知详解【转】
  2. 解决nf_conntrack: table full, dropping packet问题
  3. 配置DB2的数据库ODBC连接
  4. PHP basename() 函数
  5. win7 变WIFI热点 & 在线Linux 内核代码
  6. 手游Apk破解疯狂,爱加密apk加固保护开发人员
  7. 【转载】经典10道c/c++语言经典笔试题(含全部所有参考答案)
  8. 消息队列Queue大全
  9. java编程思想-第13章-某些练习题
  10. 实用HTML5游戏资源
  11. RHCSA
  12. 预热ASP.NET MVC 的View
  13. Linux VPS基础命令 - cp复制文件命令
  14. C#---装箱、拆箱的一个案例
  15. MySQL DDL--ghost工具学习
  16. form表单验证字段学习总结
  17. 大话存储 3 - 七种磁盘RAID技术
  18. c语言gets()函数与它的替代者fgets()函数
  19. windows10删除开始菜单中的xbox、人脉、邮件等应用
  20. BZOJ3994 约数个数和