mysql mariadb 创建mysql mariadb用户,登录报错

mysql mariadb 创建energy普通用户,登录mysql报错 :access denied

GRANT REPLICATION CLIENT,PROCESS,SELECT ON *.* TO 'mysqld_exporter'@'%' identified by '123';

解决办法:

  1. 登录mysql 查看用户表
mysql -uroot -pPote123
select user,host,password from mysql.user;


发现有两条用户为空的记录

  1. 删除匿名用户
drop user ''@'localhost';
drop user ''@'gxkt-app2';
quit
systectl restart mariadb

登录成功

  1. 分析理解

mysql默认host为localhost,由于mysql的规则是host优先级比user高,所以会先匹配host,mysql就会去用户表里取 host=localhost的数据进行认证,所以普通用户energy的记录当然就被过滤掉了,因而也就登录不上了。
那么有人会问%不是可以匹配所有的ip吗,那么应该也可以匹配localhost啊?是的,%可以匹配localhost,但是这里涉及到一个优先级的问题,匹配到了localhost就不会继续匹配%

mysql -uroot -pPote123

登录mysql,mysql的匹配逻辑是这样的:
(1) 匹配host,匹配成功(匹配到一条或多条)就进入下一步
(2) 匹配user,匹配到第一条后停止,进入下一步
(3) 有匹配验证密码,没有密码提示输入密码
匿名用户的user为空(‘’),是可以匹配所有字符的,所以只要有匿名用户存在,其余普通用户在本机是登录不上的。

  • 使用普通用户登录匹配过程
mysql -uenergy -pPote123

| root   | localhost | *588C4F8219256889231F450E881100ED8F2D8D6C |
|        |  localhost | 

(1)匹配host,匹配到以上两条记录host=localhost
(2)匹配user,匹配到energy,匹配到一条记录空(空字符可以匹配所有的字符)
(3)匹配password ,匹配失败,返回access denied

  • 使用root用户登录匹配过程
mysql -uenergy -pPote123

(1)匹配host,匹配到以上两条记录host=localhost
(2)匹配user,匹配到root,匹配到一条记录空(空字符可以匹配所有的字符)
(3)匹配password ,匹配成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值