Linux下MySQL的Access denied for user
使用环境:Centos7.4 ,Mysql5.7
1、root不能在版本地登录
问题描述:
在linux命令行用mysql -uroot -ppasswaord 登录却报了这么个错:
ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES)
解决方法:
(1)首先要确定登录密码正确,如果密码不对也会出现这个错误。(可以看应用里连接配置确认)
(2)如果==密码正确之后还是不能连接,或者忘记密码,没有临时密码==,都可以使用以下办法:
(a)编辑/etc/my.cnf
的mysqld下 添加skip-grant-tables
配置。
[mysqld]
skip-grant-tables
(b)重启MySQL服务,根据版本选择。
service mysqld restart
systemctl restart mysqld.service
(c)直接mysql -uroot 登录
(d)修改MySQL密码
# 5.7之前
update user set password=password('your_password') where user='root' and host='localhost';
# 5.7之后
update user set authentication_string=password('your_password') where user='root' and host='localhost';
flush privileges;
(e)注释掉skip-grant-table
、重启MySQL服务。再次登录验证即可。
(f)可能会让你先改密码
提示: ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
执行:
mysql> ALTER USER USER() IDENTIFIED BY 'your_password';
2、用户不能在非本地登录
问题描述:
一般出现在客户端连接mysql服务的时候:
mysql access denied for user root@ip useing password
解决方法:
(1)首先确保密码正确
(2)如果密码正确还是不能连接,说明缺少授权。
(a)mysql -uroot 在服务端登录
(b)查询用户登录的授权状态
use mysql;
select host,user from user;
(c)确认用户在指定IP没有授权,就授权
-- 适用于开发账户,授权root在任意主机登录,拥有全部schema的全部表的全部权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION;
-- 刷新权限,刷新之后客户端需要重新连接方可生效
FLUSH PRIVILEGES;
(d)客户端重新连接即可。
特别说明:如果对权限管理比较严格,可以按IP授权,也可以按网段授权,可以授权不同的权限级别,可以授权不同操作权限等相关操作,可以参考关于Mysql授权的的内容在《Mysql常用命令》中的授权部分。