user表中存在多條相同user不同host用戶信息時MySQL該匹配哪條記錄登錄?


問題:
 當用戶名相同,但主機名不同的多條記錄。用戶由不同主機登錄時,選擇使用那條記錄來驗證,數據庫版本為:5.6.25

如:IP為192.168.141.241 hostname為vhost02主機上的MySQL上有下面幾個用戶:
 test01@localhost、test01@127.0.0.1、test01@192.168.196.128、test01@192.168.196.%、test01@vhost02  、test01@vhost03

如果要用root用戶登錄數據,數據庫會選擇哪個用戶?

實驗結論:

1.僅當用戶的host='localhost'存在時,不指定-h可以登錄;

2.其它情況,本機登錄,-h 指定為什么(localhost,127.0.0.1,IP)就用host等於什么的用戶登錄;

3.其它情況,異地登錄,登錄機器IP為多少就用能夠與它匹配的host登錄(host越具體,此用戶優先級越高)。

4.實驗證明,-h指定為hostname,即使有hostname記錄用戶也不能通過hostname登錄;

5.實驗證明,-h指定為hostname,且配置/etc/hosts中對應hostname的記錄時,將-h hostname 轉化為-h IP登錄;

測試過程:

mysql> create user test01@'localhost' identified by 'localhost'; Query OK, 0 rows affected (0.25 sec)

mysql> create user test01@'127.0.0.1' identified by '127001'; Query OK, 0 rows affected (0.00 sec)

mysql> create user test01@'192.168.196.128'  identified by '192168196128'; Query OK, 0 rows affected (0.01 sec)

mysql> create user test01@'192.168.196.%' identified by '192168196%';Query OK, 0 rows affected (0.17 sec)
mysql> create user test01@'vhost02' identified by  'vhost02'; Query OK, 0 rows affected (0.00 sec)

mysql> create user test01@'vhost03' identified by  'vhost03';Query OK, 0 rows affected (0.12 sec)

 

 

test01@localhost、test01@127.0.0.1、test01@192.168.196.128、test01@192.168.196.%、test01@vhost02都存在時

 

NO.1 不指定-h

NO.2 指定-h localhost

測試127.0.0.1時需要打開skip-name-resolve

NO.3 指定-h 127.0.0.1

NO.4 指定-h 192.168.196.128

 NO.5 指定-h vhost02

 test01@localhost不存在、test01@127.0.0.1、test01@192.168.196.128、test01@192.168.196.%、test01@vhost02都存在時

 

 

test01@192.168.196.128\test01@192.168.196.%

mysql> drop user test01@'192.168.196.128';Query OK, 0 rows affected (0.26 sec)

配置/etc/hosts,再使用-h vhost02登錄

vhost02上測試

vhost03上測試

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM