mysql登陆其他用户出错_MySQL创建的用户无法从本地登陆

前几天发现了一个有趣的事情,两台类似的mysql数据库,都有dong这个用户。在本地连接时,一个连接正常,一个连接失败。

两台的mysql版本都是5.6 。下面是两台mysql上的所有账户:

服务器1:

42b9bdbba0278c7bb30394b7de489563.png

服务器2:

f21a06fb42208d80fd9e635c4af026f9.png

这两台服务器上都有dong用户,且都可以从任何地方登陆(host列的值是%)。但我在服务器2上却登陆失败了!

afaf7c6da707fa31997fe7170465fe2e.png

服务器1登陆成功

f90e4d5087e3d24c62f54eb3f6e9c25b.png

服务器2 登陆失败

查阅官方文档后,发现了一些信息。

0e4acc639bcae2440ac52238f1340ac8.png

有时候用户的连接信息可能匹配到了user表的多行记录。那到底用哪一行来认证呢?

mysql会把user表加载到内存,并对所有的行进行排序。当有用户连接时,就从第一行开始匹配,并使用第一个匹配到的行来认证。排序是按照主机名的明确性来排序,谁更明确,谁就排在前面。主机名明确性相同就按照用户名的明确性继续排序。(localhost比%明确,%代表可以从任意地方登陆,localhost代表只能从本地登陆)

比如:服务器1 的user表排序后的顺序可能是

root  localhost

rep   %

dong  %

root   %

服务器2 的user表排序后的顺序可能是

root    localhost

root    localhost.localdomain

root    127.0.0.1

root    ::1

localhost

localhost.localdomain

dong    %

在服务器1上登陆时,匹配到了1行,也就是(dong %),登陆没有问题。在服务器2上登陆时,匹配到了3行,也就是('' localhost),('' localhost.localdomain),(dong %) 。但是第一个匹配到的是('' localhost),所以会用这一行来认证。至于登陆失败是因为('' localhost)这个用户是没有密码的。如果使用 mysql -udong 就可以登陆了,并且会以''@localhost这个用户来登陆。

217b0c52b1b5e07b5dec20c6fe03877f.png

查看一下登陆的用户

75faa73323a11340f0ad86ad662b5c32.png

???哪里来的dong@localhost 用户?查看一下这个用户的权限

de8ed498b482a4c3be30eb07ae852bd1.png

验证了我前面说的是用’’@localhost这个用户登陆的。

一般的我们会删掉服务器2上用户名为空的用户,这样登陆就不会出现上面的问题。或者也可以再建一个同名的用户,不过登陆的host是localhost 这样在本地也可以登陆了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值