mysql在创建用户时可以指定host,通配符%表示可以匹配任何host(当然localhost除外,localhost优先级大于%)
create user 'hys'@'%' identified by 'hello';
create user 'hys'@'localhost' identified by 'wtf';
create user 'hys'@'127.0.0.1' identified by '666';
flush privileges;
使用命令进行连接mysql -uhys -phello
,报错如下 使用命令进行连接mysql -uhys -pwtf
则可以正常连接。 使用命令进行连接mysql -uhys -h127.0.0.1 -p666
说明mysql在进行连接时把127.0.0.1
转换成了localhost
删除掉hys@localhost
使用命令进行连接mysql -uhys -h127.0.0.1 -p666
可正常连接
结论: 1.通配符不包括localhost
2.当同一用户host同时存在localhost
和%
时,会优先匹配localhost
3.当同一用户host同时存在localhost
和127.0.0.1
时,虽然连接时指定了-h127.0.0.1
但也会先匹配localhost
4.当存在127.0.0.1
而不存在localhost
,指定-h127.0.0.1
可以进行连接
Ref: https://dev.mysql.com/doc/mysql-security-excerpt/8.0/en/problems-connecting.html