Chinaunix首页 | 论坛 | 博客
  • 博客访问: 228273
  • 博文数量: 30
  • 博客积分: 1617
  • 博客等级: 上尉
  • 技术积分: 317
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-02 10:32
文章分类

全部博文(30)

文章存档

2019年(1)

2016年(1)

2014年(1)

2012年(3)

2011年(4)

2010年(8)

2009年(5)

2008年(7)

我的朋友

分类: Mysql/postgreSQL

2010-08-07 10:47:48

    我们常常会发现,我从客户端来连接服务器时,发现服务器端mysql库中的授权表有多条记录匹配我的这个连接,那么服务器会选择哪条记录来验证本次连接呢?
    其实mysql会按照下面的方法解决这个问题
    首先mysql启动的时候会读入mysql,然后进行排序;
    然后按排序后的条目来匹配验证客户端的连接,mysql服务器会选择与客户端连接匹配的第一行记录来验证。
    那么mysql会按照什么规则来排序呢?
    首先以user表中的host值来排序,最具体的主机名或ip地址排在最前面;
    其次如果host值相同,会再按照user值来排序,也是跟host值排序一样,最具体的user值排在最前面。
下面通过个例子来说明一下
 
    例如:user表中的host和user值如下:
+-------------+----------+-
| Host        | User     | 
+-------------+----------+-
| %           | devl     | 
| 192.168.1.1 | dev1     | 
| 192.168.1.1 |          | 
| 192.168.%   | dev1     | 
+-------------+----------+-
那么按照上面所说的规则,user表被载入内存后排序,得到下面的样子:
+-------------+----------+-
| Host        | User     | 
+-------------+----------+-
| 192.168.1.1 | devl     | 
| 192.168.1.1 |          | 
| 192.168.%   | dev1     | 
| %           | dev1     | 
+-------------+----------+-
 
    如果你能够连接服务器,但你的权限不是你期望的,你可能被鉴定为其它账户。要想找出服务器用来鉴定你的账户,可以使用CURRENT_USER()函数。它返回格式的值
 
     例如:select CURRENT_USER();
阅读(1343) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~