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

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

               thd->main_security_ctx.host_or_ip);

      return 1;

    }

  }

  else /* Hostname given means that the connection was on a socket */

  {

   ...

  }

  vio_keepalive(net->vio, TRUE);

 

  ...

 

  char *user= end;

  char *passwd= strend(user)+1;

  uint user_len= passwd - user - 1;

  char *db= passwd;

  char db_buff[NAME_LEN + 1];           // buffer to store db in utf8

  char user_buff[USERNAME_LENGTH + 1];    // buffer to store user in utf8

  uint dummy_errors;

 

  uint passwd_len= thd->client_capabilities & CLIENT_SECURE_CONNECTION ?

    (uchar)(*passwd++) : strlen(passwd);

  db= thd->client_capabilities & CLIENT_CONNECT_WITH_DB ?

    db + passwd_len + 1 : 0;

  uint db_len= db ? strlen(db) : 0;

 

  if (passwd + passwd_len + db_len > (char *)net->read_pos + pkt_len)

  {

    inc_host_errors(&thd->remote.sin_addr);

    my_error(ER_HANDSHAKE_ERROR, MYF(0), thd->main_security_ctx.host_or_ip);

    return 1;

  }

 

...

  /* If username starts and ends in "'", chop them off */

  if (user_len > 1 && user[0] == '\'' && user[user_len - 1] == '\'')

  {

    user[user_len-1]= 0;

    user++;

    user_len-= 2;

  }

 

  if (thd->main_security_ctx.user)

    x_free(thd->main_security_ctx.user);

  if (!(thd->main_security_ctx.user= my_strdup(user, MYF(MY_WME))))

    return 1; /* The error is set by my_strdup(). */

  return check_user(thd, COM_CONNECT, passwd, passwd_len, db, TRUE);//验证用户名和密码

 

}

 

  

 

上面的源码主要做了如下几件事情:

 

获取客户端的IP和主机名

acl_check_host函数验证USER表中是否存在相应的IP或HOST,如果不存在直接报错

获取用户名和密码

check_user函数验证用户名和密码(不输入用户名默认为ODBC),如果系统表中不存在匹配的报错返回

获取用户的权限列表,验证用户的相关属性是否合法,如连接数是否超过上限,连接是否超时,操作是否超过限制等信息,如果不合法,则报错返回。

    由于在一个认证的过程中涉及到的东西比较多,各个方面吧,我不能一一跟踪,只能大概了解其中的实现流程,捡重点进行

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

推荐热点

  • mysql-mmm
  • mysqldump命令——MySQL数据库备份还原
  • Oracle数据导入MySQL的快捷工具:MySQL Migration Toolkit
  • 简简单单储存过程——循环一个select结果集
  • MySQL数据库十大优化技巧
  • Mysql主主复制架构配置
  • Mysql安装笔记
  • Mysql的Procedure 参数为NULL问题分析
  • MySQL Stmt预处理提高效率问题的小研究
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1