Centos下MySQL 5.7.13版本密码的修改

2016-07-19 11:23:58   作者:MangoCool   来源:MangoCool

 MySQL 5.7版本开始,增强了密码验证机制,网上说安装的时候会在/root/.mysql_secret 文件中生成默认密码,我用MySQL 5.7.13时没找到该文件,原来这一点自 5.7.6版本以后也去掉了。折腾了一天觉得很有必要记录下来,本文描述使用MySQL 5.7.13时root密码的修改和用户的创建并赋权限


针对root生成默认密码的修改,内容如下:

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

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

service mysqld restart

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

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

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

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

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

7、通过 ALTER USER USER() IDENTIFIED BY 'news_password'; 命令重新设置密码。


创建用户并赋权限:

mysql> create user 'testuser'@'%' identified by 'testuser';
mysql> grant all privileges on *.* to 'testuser'@'%' with grant option;
mysql> flush privileges;
mysql> exit;


解决密码失效

在配置文件的[mysqld]字段下,增加以下字段:

[mysqld]
default_password_lifetime=0

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

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


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

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') 方法。

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

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

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

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

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的或更长时间不能匹配 单词在字典文件中,如果一个人被指定。


参考文章:http://bbs.bestsdk.com/detail/762.html

                 http://dev.mysql.com/doc/refman/5.7/en/password-expiration-policy.html

标签: MySQL password 修改root密码

分享:

关于我

一个喜欢唱歌,热衷旅行,爱好电子产品的码农。没事,跟三五好友吼上几嗓子,约上几个背着行囊去露营或者宅在家里抱着孩子敲代码。

座右铭:当你的才华还撑不起你的野心的时候,你就应该静下心来学习,永不止步!

            人生之旅历途甚长,所争决不在一年半月,万不可因此着急失望,招精神之萎葸。


Copyright 芒果酷(mangocool.com) All rights reserved. 湘ICP备14019394号

免责声明:本网站部分文章转载其他媒体,意在为公众提供免费服务。如有信息侵犯了您的权益,可与本网站联系,本网站将尽快予以撤除。