MySQL修改root密码的一些问题以及navicat连接1251错误

闲来无事,突然想学个MySQL,没想到开头就是这么难,关于修改root密码可谓是一波三折

而这之中曲折的罪魁祸首这是MySQL的版本问题,下面我就分为两部分来说说修改root密码,以MySQL5.7.9为界线,因为mysql 5.7.9以后废弃了password字段和password()函数;authentication_string:字段表示用户密码。

 mysql 5.7.9以下修改密码很方便,基本就是三种方法

1、 用SET PASSWORD命令   

mysql> set password for 用户名@localhost = password('新密码');

2、用UPDATE直接编辑user表  

mysql> use mysql;  
mysql> update user set password=password('新密码') where user='root' and host='localhost';  
mysql> flush privileges;

3、在知道原密码的前提下用mysqladmin 

mysql> mysqladmin -u用户名 -p旧密码 password 新密码

 

mysql 5.7.9以上的版本修改就要注意很多地方了

1、root用户authentication_string字段下有内容,先将其设置为空,没有跳过

 

desc user;#查看是否为空

 

use mysql; 
update user set authentication_string='' where user='root'

2、直接执行

ALTER user 'root'@'%' IDENTIFIED BY '新密码'

 

关于密码策略的修改问题以及数据库工具连接问题(报错1251)

首先我们要查看 mysql 初始的密码策略,输入show variables like 'validate_password%';

 设置密码的验证强度等级,设置 validate_password.policy 的全局参数为 LOW 即可,

mysql>  set global validate_password.policy=LOW;

 

设置密码的长度,设置validate_password.length的全局参数即可,

mysql> set global validate_password.length=6;

关于 mysql 密码策略相关参数;

validate_password.length  固定密码的总长度;
validate_password.dictionary_file 指定密码验证的文件路径;
validate_password.mixed_case_count  整个密码中至少要包含大/小写字母的总个数;
validate_password.number_count  整个密码中至少要包含阿拉伯数字的个数;
validate_password.policy 指定密码的强度验证等级,默认为 MEDIUM;
validate_password.special_char_count 整个密码中至少要包含特殊字符的个数;

关于 validate_password.policy 的取值:

0/LOW:只验证长度;
1/MEDIUM:验证长度、数字、大小写、特殊字符;
2/STRONG:验证长度、数字、大小写、特殊字符、字典文件;

 

然后还有一点很重要就是user表中的这个host字段,root用户的host在不同版本的取值也不一样,这对后面修改密码和加密规则都有影响,

mysql> use mysql;
mysql> select user,host from user;

1、完全忘记密码

mysql> use mysql;

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
mysql> FLUSH PRIVILEGES;

2、记得原密码,输入命令行最后输入老密码确定

mysql> mysqladmin -u root -p password 新密码

 

'localhost' 指的是用户开放的IP,可以是'localhost'(仅本机访问,相当于127.0.0.1),可以是具体的'*.*.*.*'(具体某一IP),也可以是 '%' (所有IP均可访问)

例如修改加密规则的两种不同方式,解决1251错误

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码'

  FLUSH PRIVILEGES; #刷新权限 

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新密码';

  FLUSH PRIVILEGES; #刷新权限 

注:mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password,连接sqlyog时出现加密规则错误1521 ,解决问题方法有两种,一种是升级navicat驱动,一种是把mysql用户登录密码加密规则还原成mysql_native_password.

远程连接修改,其中“%”表示允许所有机器能访问root用户

update user set host='%' where user='root';
flush privileges;

原文出处:https://www.cnblogs.com/Mattmao/p/11550991.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章