zoukankan      html  css  js  c++  java
  • MySQL创建的用户无法从本地登陆

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

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

    服务器1:

     

    服务器2:

     

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

     

                  服务器1登陆成功

     

                  服务器2 登陆失败

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

     

    有时候用户的连接信息可能匹配到了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这个用户来登陆。

     

    查看一下登陆的用户

     

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

     

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

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

    转载请注明出处:http://www.cnblogs.com/ayard/
  • 相关阅读:
    [工作代码]dom4j解析实例
    dom4j解析xml报错:Nested exception: org.xml.sax.SAXParseException: White space is required between the processing instruction target and data.
    小米蓝牙耳机使用说明书
    猎豹浏览器(chrome内核)屏蔽视频广告
    [转载]python的常用代码模板
    [转载]存储过程
    存储过程格式及实例
    springboot(十八):解决跨域问题
    springboot(十八):CORS方式实现跨域
    springboot(十七):过滤器(Filter)和拦截器(Interceptor)
  • 原文地址:https://www.cnblogs.com/ayard/p/9850104.html
Copyright © 2011-2022 走看看