当前位置:   article > 正文

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

1045-access denied for user

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

步骤概括

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服务即可生效

  1. systemctl restart mysqld.service //重启mysql服务
  2. systemctl status mysqld.service //查看mysql状态
  3. systemctl stop mysqld.service //停止mysql服务

3、进入mysql,修改mysql密码

mysql -uroot -p

不用输入密码,直接回车,即可进入mysql命令界面

首先进入表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、授权远程连接

  1. 指定某个ip可以登录,那么我就可以将授权的语句改成:
  2. grant all privileges on *.* to 'root'@'192.168.xx.xx' identified by 'root';
  3. 如果你是本地登录的,那么:
  4. grant all privileges on *.* to 'root'@'localhost' identified by 'root';
  5. 当然也可以设置所有ip都可登录
  6. grant all privileges on *.* to 'root'@'%' identified by 'root';
  7. 如果授权成功,会有Query OK的提示。
  8. 然后执行fluse privileges ,使授权立即生效
  9. flush privileges;

也许会提示错误:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

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

  1. mysql -u root -p #登录
  2. mysql>set global validate_password_policy=0; #密码强度设为最低等级
  3. mysql>set global validate_password_length=4; #密码允许最小长度为4
  4. mysql>flush privileges; #更新授权表,生效
  5. ===============关于 mysql 密码策略相关参数========================
  6. 1、validate_password_length  固定密码的总长度;
  7. 2、validate_password_dictionary_file 指定密码验证的文件路径;
  8. 3、validate_password_mixed_case_count  整个密码中至少要包含大/小写字母的总个数;
  9. 4、validate_password_number_count  整个密码中至少要包含阿拉伯数字的个数;
  10. 5、validate_password_policy 指定密码的强度验证等级,默认为 MEDIUM;
  11. validate_password_policy 的取值:
  12. 0/LOW:只验证长度;
  13. 1/MEDIUM:验证长度、数字、大小写、特殊字符;
  14. 2/STRONG:验证长度、数字、大小写、特殊字符、字典文件;
  15. 6、validate_password_special_char_count 整个密码中至少要包含特殊字符的个数

可通过sql语句查看密码策略,查相关资料可知,validate_password_length最小值为4,即使你设置为小于4的值,mysql也会默认设置为4。

show variables like 'validate_password%';

欢迎加群交流:700637673

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/474764
推荐阅读
相关标签
  

闽ICP备14008679号