MySQL笔记(二)——MySQL5.7登录认证

  • 成功在虚拟机上安装MySQL之后,创建了root用户并授予所有权限:

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root';
    
  • 当在windows系统的MySQL客户端进行创建用户并授权时报错:

    grant SELECT on micr_product.* TO 'dev'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;
    
    [Err] 1044 - Access denied for user 'root'@'%' to database 'micr_product'
    
  • 查看mysql数据库中user表发现grant权限为N,因此需要修改root用户的权限:
    在这里插入图片描述

  • 在虚拟机上登录root账户,然后执行如下命令即可:

    > revoke all on *.* from 'root'@'%';
    > GRANT ALL ON *.*  TO 'root'@'%' WITH GRANT OPTION;
    
  • 此时,root用户就获得了grant权限,此时便可以创建用户并为新用户授权了。

MySQL5.7官方文档:访问控制一【连接验证】

  • 当你试图连接到MySQL服务器时,服务器会去校验你的用户标识(用户标识包括用户名和IP),当匹配到用户标识后,会根据这个标识对应的密码去校验登录密码,再去判断账户是否被锁定,所有校验都通过后便可以连接成功

  • MySQL的用户信息保存在msyql库的user表中,每次服务器去读取user表时,都会将表中的账户按一定的规则进行排序,然后保存在内存中,当用户试图连接时,会从内存中按顺序对用户标识进行匹配,将匹配到的第一个用户标识作为当前用户的登录标识

  • 匹配规则:指定的主机名或IP地址(无论是否包含IP掩码)为最高优先级,如果IP中包含了%,则优先级低,如果IP为空字符串,同样意味着任意IP,但是优先级在%之后;如果IP相同,则指定的用户名具有较高优先级,用户名为空字符串意味着任何用户,优先级较低;如果IP和用户名的优先级都相同,那么排序是随机的。
    在这里插入图片描述

  • 基于以上理论,当登录的用户没有你所想要的权限时,你需要考虑是否账户验证的问题。查看当前账户是否登录正确可以使用一下命令,或者打印user表,然后手动进行排序获取第一个匹配的用户标识来判断:

     # 这个命令会打印出登录时校验的用户标识,格式为:用户名@主机名
     SELECT CURRENT_USER();
    
  • 例子:当用户jeffrey 从h1.example.net这个IP地址来连接服务器时,服务器匹配到的用户标识是@h1.example.net,而不是jeffrey@%,两个用户标识所对应的权限可能不一样,这样就会导致操作时权限受到限制。
    在这里插入图片描述

发布了24 篇原创文章 · 获赞 14 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/biubiu2it/article/details/100798592