Navicat 连接MySQL出现1045-Access denied for user ‘root‘@‘localhost‘已解决

转载: 原文链接:https://blog.csdn.net/li_wen_jin/article/details/103806171

出现这种情况可能是密码错误或者未授权
步骤概括

1、找到mysql配置文件,/etc/my.cnf ,在配置文件加入skip-grant-tables,然后重启mysql服务即可生效

2、免密登录mysql,修改密码,重新重启mysql

    5.7 之前版本:update user set password = password('root') where user='root';

    5.7及之后版本:update user set authentication_string = password('root') where user='root';

3、授权

    grant all privileges on *.* to 'root'@'%' identified by 'root';

    flush privileges;

详细步骤

1、找到mysql配置文件,/etc/my.cnf ,在配置文件加入skip-grant-tables

2、重启mysql服务即可生效

systemctl restart mysqld.service //重启mysql服务

systemctl status mysqld.service //查看mysql状态

systemctl stop mysqld.service //停止mysql服务
3、进入mysql,修改mysql密码

mysql -uroot -p
不用输入密码,直接回车,即可进入mysql命令界面
首先进入表mysql use mysql
修改密码:这里要根据版本来执行不同的SQL语句了,因为版本不同,存储密码的字段可能不相同。5.7以前的版本可以用以下语句更新root密码:

update user set password = password(‘root’) where user=‘root’;
如果是高版本,则会提示错误信息

ERROR 1054 (42S22): Unknown column ‘password’ in ‘field list’

而我本地mysql版本是5.7.21,里边没有password,是因为已经改成authentication_string字段了,于是重新执行修改字段后的更新语句

update user set authentication_string = password(‘root’) where user=‘root’;

修改成功!重启mysql,记得将skip-grant-tables注释。

4、授权远程连接

指定某个ip可以登录,那么我就可以将授权的语句改成:
grant all privileges on . to ‘root’@‘192.168.xx.xx’ identified by ‘root’;
如果你是本地登录的,那么:
grant all privileges on . to ‘root’@‘localhost’ identified by ‘root’;
当然也可以设置所有ip都可登录
grant all privileges on . to ‘root’@‘%’ identified by ‘root’;
如果授权成功,会有Query OK的提示。
然后执行fluse privileges ,使授权立即生效
flush privileges;
也许会提示错误:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

这样只需执行如下命令即可:

mysql -u root -p #登录
mysql>set global validate_password_policy=0; #密码强度设为最低等级
mysql>set global validate_password_length=4; #密码允许最小长度为4
mysql>flush privileges; #更新授权表,生效

=关于 mysql 密码策略相关参数==========
1、validate_password_length 固定密码的总长度;
2、validate_password_dictionary_file 指定密码验证的文件路径;
3、validate_password_mixed_case_count 整个密码中至少要包含大/小写字母的总个数;
4、validate_password_number_count 整个密码中至少要包含阿拉伯数字的个数;
5、validate_password_policy 指定密码的强度验证等级,默认为 MEDIUM;
validate_password_policy 的取值:
0/LOW:只验证长度;
1/MEDIUM:验证长度、数字、大小写、特殊字符;
2/STRONG:验证长度、数字、大小写、特殊字符、字典文件;
6、validate_password_special_char_count 整个密码中至少要包含特殊字符的个数
可通过sql语句查看密码策略,查相关资料可知,validate_password_length最小值为4,即使你设置为小于4的值,mysql也会默认设置为4。

show variables like ‘validate_password%’;

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值