MySQL登录时的三个关键名:user、host、password(即新版本authentication_string)的一些说明

MySQL登录时的三个关键名:user、host、password(即新版本authentication_string)的一些说明

当我们在终端中使用:mysql -u用户名 -p密码 格式进行登录时,其实有三个关键名控制我们进行登录,即标题中的user、host、password(即新版本authentication_string),相信单独来看这三个大家都比较清楚,但是本机终端登录的时候,默认的host只能是“localhost”,否则无法登录。

什么意思呢?分几点来说:

1、简单来说当某用户对应的host不包含“localhost”在内的话,是无法登录的。

#select user,host from mysql.user;
#如下是通过上面的查询语句查询到的所有mysql的user和host信息。
+------------------+--------------+
| user             | host         |
+------------------+--------------+
| root             | %            |
| test             | %            |
| test2            | 10.36.151.%  |
| ceshi            | 10.36.151.17 |
| debian-sys-maint | localhost    |
| mysql.session    | localhost    |
| mysql.sys        | localhost    |
| root             | localhost    |
+------------------+--------------+
#里面有两个可能用户可能无法登录:
#1)"test2"@"10.36.151.%",这个代表在10.36.151.*网段的用户才可以登录连接这个用户,如果本地的地址不在这个网段,那么无法登录;
#2)"ceshi"@"10.36.151.17",与上面类似,只有10.36.151.17网址才能登录,其他不可登录。

#报错如下:ERROR 1045 (28000): Access denied for user 'ceshi'@'localhost' (using password: YES)

2、当用户的host包含“localhost”时,登录的用户host总是等于localhost,什么意思呢?如下:

#select user,host from mysql.user;
#如下是通过上面的查询语句查询到的所有mysql的user和host信息。
+------------------+--------------+
| user             | host         |
+------------------+--------------+
| root             | %            |
| test             | %            |
| test2            | 10.36.151.%  |
| ceshi            | 10.36.151.17 |
| debian-sys-maint | localhost    |
| mysql.session    | localhost    |
| mysql.sys        | localhost    |
| root             | localhost    |
+------------------+--------------+
#我们使用test进行登录:mysql -utest -p
#登录成功后,查看当前的用户:select user();显示的结果是:
+----------------+
| user()         |
+----------------+
| test@localhost |
+----------------+
#那么对host其实我们的理解就会又更深了一些,登录的三个关键字实际是:mysql -u "test"@"localhost" -p password

查看官方文档(地址:https://dev.mysql.com/doc/refman/5.7/en/creating-accounts.html)关于这个的说明,有如下一段话:The ‘finley’@‘localhost’ account is necessary if there is an anonymous-user account for localhost. Without the ‘finley’@‘localhost’ account, that anonymous-user account takes precedence when finley connects from the local host and finley is treated as an anonymous user. The reason for this is that the anonymous-user account has a more specific Host column value than the ‘finley’@’%’ account and thus comes earlier in the user table sort order.

有道翻译的结果:如果localhost有一个匿名用户帐户,那么“finley”@“localhost”帐户是必要的。如果没有“finley”@“localhost”帐户,当finley从本地主机连接并且finley被视为匿名用户时,匿名用户帐户将优先。这样做的原因是,匿名用户帐户具有比’finley’@’%'帐户更具体的主机列值,因此在用户表排序顺序中更早。

所以其中的一些问题,细细回味可以知道,本地host的值就是localhost,至于其他值则在远程连接时会有涉及。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值