您现在的位置:主页 > 技术中心 > 数据库技术 > Mysql

Mysql源码学习——用户认证原理与实现(3)

来源:未知 责任编辑:责任编辑 发表时间:2014-01-06 18:17 点击:

  

 

    这里比我们预想的只需要用户名和密码的方式有所出入,多了一个Host字段,这个字段起到什么作用呢?!原来Mysql的登录认证不仅需要验证用户名和密码,还需要验证连接的主机地址,这样也是为了提高安全性吧。那如果我想一个用户在任何地址都可以进行登录岂不是要设置很多地址?Mysql提供了通配符,可以设置Host字段为*,这就代表可以匹配任何Host。具体看下这三行的意思,这三行的密码均为空。针对root用户,不需要输入密码,客户端的地址为本机。第三行的用户名为空,Host为localhost,说明本地的任何用户均可以进行登录,即使是个不存在的用户也可以登录成功,但是仅限于登录,没有其他相关的权限,无法进行实际操作。

 

二、源码跟踪

 

       在Connection Manager中提到了login_connection函数用于检查用户名和密码等相关信息,其源码如下(重点的函数代码

 

会着色):

 

static bool login_connection(THD *thd)

{

  NET *net= &thd->net;

  int error;

  DBUG_ENTER("login_connection");

  DBUG_PRINT("info", ("login_connection called by thread %lu",

                      thd->thread_id));

 

  /* Use "connect_timeout" value during connection phase */

  my_net_set_read_timeout(net, connect_timeout);

  my_net_set_write_timeout(net, connect_timeout);

error= check_connection(thd); //此处是验证的具体函数

 

  net_end_statement(thd);

 

  if (error)

  {                        // Wrong permissions

#ifdef __NT__

    if (vio_type(net->vio) == VIO_TYPE_NAMEDPIPE)

      my_sleep(1000);                /* must wait after eof() */

#endif

    statistic_increment(aborted_connects,&LOCK_status);

    DBUG_RETURN(1);

  }

  /* Connect completed, set read/write timeouts back to default */

  my_net_set_read_timeout(net, thd->variables.net_read_timeout);

  my_net_set_write_timeout(net, thd->variables.net_write_timeout);

  DBUG_RETURN(0);

}

 

  

 

此函数主要是功能是调用函数check_connection进行用户认证,由于函数check_connection过长,对其进行简化,如下所示:

 

 static int check_connection(THD *thd)

 

{

  uint connect_errors= 0;

  NET *net= &thd->net;

  ulong pkt_len= 0;

  char *end;

 

  DBUG_PRINT("info",

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片

推荐热点

  • mysql-mmm
  • mysqldump命令——MySQL数据库备份还原
  • Oracle数据导入MySQL的快捷工具:MySQL Migration Tool
  • 简简单单储存过程——循环一个select结果集
  • MySQL数据库十大优化技巧
  • Mysql安装笔记
  • Mysql主主复制架构配置
  • Mysql的Procedure 参数为NULL问题分析
  • MySQL Stmt预处理提高效率问题的小研究
?? - ?? - ÝřŝžľŘÝź - TAGąęÇŠ - RSSśŠÔÄ - ??
Copyright © 2004-2024 上海卓卓网络科技有限公司