MySQL多个同名用户且不同host会怎样

有时候我们会发现有创建多个相同名称的用户,但是host给的不是相同的,最普遍的是有的小伙伴习惯性的创建 root 用户,系统有默认的 root@'127.0.0.1' ,而自己再去创建个 root@'%' 或 root@'192.168.20.%'类似这种的,那么存在多个相同名称的了,mysql在登录时候会选择哪个用户来进行登陆呢?

记得有块官方文档介绍这一块的,一时没找到,感兴趣小伙伴自己去找下。大致意思应该如下:

服务器使用与客户端主机名和用户名相匹配的第一行记录进行授权。
在服务器使用的排序规则中,先排序主机名字段值(越精确的值越靠前,字符串主机
名和IP地址是最具体的。
另外,IP地址的精确度不会受到掩码的影响,例如:
192.168.100.13和192.168.100.0/255.255.255.0被视为具有相同的精确度。
通配符“%”表示“任意主机”,被视为精确度较差的主机名。空字符串也意味着“任意主机”,但精确度比“%”更差,所以排在“%”之后),
然后按照用户名字段值进行排序(排序规则与主机名字段值的排序规则类似)。
主机名和用户名两个字段值的排序规则有点类似于多列索引中的排序规则。

直接上环境测试验证。

测试环境:

mysql> select version();
+------------+
| version()  |
+------------+
| 5.7.25-log |
+------------+
1 row in set (0.00 sec)

演示

1.创建不同相同用户名且不同host的用户

SESSION 1

mysql> create user 'yangq'@'192.168.20.100' identified by '123456a';
Query OK, 0 rows affected (0.01 sec)mysql> create user 'yangq'@'192.168.20.%' identified by '123456b';
Query OK, 0 rows affected (0.01 sec)mysql> create user 'yangq'@'192.168.%' identified by '123456c';
Query OK, 0 rows affected (0.01 sec)mysql> create user 'yangq'@'%' identified by '123456d';
Query OK, 0 rows affected (0.01 sec)

2.登录测试

SESSION 2

当前存在 % ,192.168.% , 192.168.20.% , 192.168.20.100,使用ip 连接一下看看,使用的是哪个用户连接的。

结果发现,连接是已最小权限的那个用户去判断连接的,当前最小host是 192.168.20.100

[root@tx19 ~]# mysql -h192.168.20.100 -uyangq -p123456a
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 199
Server version: 5.7.25-log MySQL Community Server (GPL)Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.mysql> select current_user();
+----------------------+
| current_user()       |
+----------------------+
| yangq@192.168.20.100 |
+----------------------+
1 row in set (0.00 sec)mysql> exit
Bye
[root@tx19 ~]# mysql -h192.168.20.100 -uyangq -p123456b
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'yangq'@'192.168.20.100' (using password: YES)
[root@tx19 ~]# mysql -h192.168.20.100 -uyangq -p123456c
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'yangq'@'192.168.20.100' (using password: YES)
[root@tx19 ~]# mysql -h192.168.20.100 -uyangq -p123456d
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'yangq'@'192.168.20.100' (using password: YES)

删除 192.168.20.100 的 host 用户

mysql> drop user 'yangq'@'192.168.20.100';
Query OK, 0 rows affected (0.01 sec)

再次登录,按照上面的推测,应该是使用 yangq@'192.168.20.%' 这个用户了。

验证结果证实确实是这么回事

[root@tx19 ~]# mysql -h192.168.20.100 -uyangq -p123456bmysql> select current_user();
+---------------------+
| current_user()      |
+---------------------+
| yangq@192.168.20.% |
+---------------------+
1 row in set (0.00 sec)mysql> exit
Bye
[root@tx19 ~]# mysql -h192.168.20.100 -uyangq -p123456c
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'yangq'@'192.168.20.100' (using password: YES)
[root@tx19 ~]# mysql -h192.168.20.100 -uyangq -p123456d
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'yangq'@'192.168.20.100' (using password: YES)

结论

若存在多个相同用户名称,但host限制不同的用户,MySQL优先会选择host限制大的,也就是开放最少ip段的用户,其余的不能登录。

例如:

yangq@'192.168.20.100'
yangq@'192.168.20.%'
yangq@'192.168.%'
yangq@'%'

用户登陆时候,会优先选择使用yangq@'192.168.20.100'用户进行登陆,即使你使用其他的用户与正确的密码也不能登录上去,因为去校验的是 yangq@'192.168.20.100' 这个用户的密码了

ubuntu修改登陆用户名称_MySQL对于相同名称用户但host不同的登陆选择相关推荐

  1. mysql 用户命令_MySQL命令行新建用户

    https://www.cnblogs.com/penciler/p/4813157.html MySQL命令行能否实现新建用户呢?答案无疑是肯定的.而且在使用使用MySQL命令行新建用户后,还可以为 ...

  2. mysql允许所有用户连接_Mysql权限控制 - 允许用户远程连接

    Mysql为了安全性,在默认情况下用户只允许在本地登录,可是在有此情况下,还是需要使用用户进行远程连接,因此为了使其可以远程需要进行如下操作: 一.允许root用户在任何地方进行远程登录,并具有所有库 ...

  3. mysql 用户授权_mysql添加、删除用户和授权用户

    MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束): 1.新建用户 1.1 登录MYSQL: @>mysql -u root -p @&g ...

  4. mysql数据库用户建立_Mysql数据库之创建用户

    注:在Mysql数据库中SQL语句默认是以":"结尾.输入命令时,关键字可以大写也可以小写,但必须保持一致,本人比较倾向使用小写,个人习惯吧. 在Mysql中创建数据库用户主要有三 ...

  5. ubuntu修改登陆用户名称_修改ubuntu的用户名(注意用户名和主机名的区别)

    1.用户名是user,一个主机可以有多个主机; 主机名是 hostname,要修改,就去 /etc/hostname目录修改. 2.修改用户名: 比如我想把 用户名"sanshanxiash ...

  6. Windows10修改用户账户文件夹的名称

    @一贻 这位用户在按照下述方法修改名称后说无法保存东西了,且笔者也没有解决办法,但是笔者在修改名称后是没有出现这种情况的,所以可能是个例,跟自己的电脑或者系统版本等之类的事情有关.如果有知道怎么解决的 ...

  7. ubuntu修改新增用户的目录_Ubuntu 18.04下创建新用户/目录、修改用户权限及删除用户的方法...

    以下介绍在Ubuntu 18.04系统下创建新用户/目录.修改用户权限及删除用户的正确方法.在Ubuntu系统上创建新用户使用[sudo useradd 用户名]命令,但只能创建用户,不能在/home ...

  8. 【Ubuntu 修改盘符名称】

    [Ubuntu 修改盘符名称] sudo ntfslabel /dev/sda2 newname #适用于NTFS,newname为新磁盘名称 sudo e2label /dev/sda2 newna ...

  9. mysql修改登录权限设置密码_MySQL修改用户密码及权限限制设置

    使用phpmyadmin来更改Mysql的root密码非常方便,安装配置好phpmyadmin后,首先登陆管理界面,点击右侧修改密码链接,输入你要修改的Mysql的root新密码,最后点击执行即可, ...

  10. mysql建用户无密码_mysql 新建用户,授权,删除用户,修改密码

    一.用户基本操作 1.创建用户 登陆: mysql> mysql -u root -p 新建用户 mysql> CREATE USER test IDENTIFIED BY '123456 ...

最新文章

  1. 如何为javascript代码编写注释以支持智能感知
  2. 关于wordpress 点击文章查看内容跳转加载失败(404)的解决方法
  3. 做为产品经理如何判断一个创业项目是否靠谱?
  4. 菜鸟,下一代分布式体系架构的设计理念
  5. java对象不会被改变_Java 并发编程(二)对象的不变性和安全的公布对象
  6. LeetCode 210. 课程表 II(拓扑排序)
  7. android lottie字体json,Android 动画深入Lottie
  8. 关于 UML 模型 Visio的说明
  9. 项目分层思路——管家婆
  10. Spring中IoC两种接口和两种依赖注入方式的比较
  11. 史上最优秀的转换工具类网站推荐[唯一保存历史转换记录]
  12. 信息爆炸时代,对待信息的三种方式
  13. (day 23 - 中位数 投票法 )剑指 Offer 39. 数组中出现次数超过一半的数字
  14. 【SecureCRT的下载、安装与使用】详细过程
  15. VHDL三段式状态机
  16. makefile编写rtl仿真脚本
  17. 【Excle】在方框内打勾
  18. 倾斜摄影 正摄影_如何安全地在线购买摄影装备
  19. 一个功能超全的「登录认证」神器!
  20. office 宏病毒分析

热门文章

  1. 项目中遇到生产事故追踪---重复组单
  2. Nexus Android8 0系统拍照预览方向问题解决方法
  3. 精读《手写 SQL 编译器 - 回溯》 1
  4. 恩施州推进大数据监督检查工作规范化常态化
  5. 二维数组矩阵常用实现方法
  6. TurboMail邮件系统促进马可波罗瓷砖集团迅猛发展
  7. python语法32[装饰器decorator](转)
  8. NYOJ 3(多边形重心)
  9. 理论物理专题讲义(量子力学与统计物理部分)
  10. born to be wild---Bangkok篇