【原创】MySQL Proxy - read_auth_result()

       在鉴权阶段由服务器返回的包可以通过 read_auth_result() 函数进行捕获分析。该函数的唯一参数是由服务器返回的鉴权包的本身。由于该包是一个裸 MySQL 网络协议包,你必须通过检查包的首字节来确认包的类型及其对应的内容。可以使用常量 MYSQLD_PACKET_ERR 和 MYSQLD_PACKET_OK 来标示当前鉴权是否成功: 

function read_auth_result(auth)
        local state = auth.packet:byte()

        if state == proxy.MYSQLD_PACKET_OK then
                print("<-- auth ok");
        elseif state == proxy.MYSQLD_PACKET_ERR then
                print("<-- auth failed");
        else
                print("<-- auth ... don't know: " .. string.format("%q", auth.packet));
        end
end

       如果一个允许使用 long-password 的客户端尝试向支持 long-password 的服务器进行鉴权,但是实际提供的用户密码确是 short 的,read_auth_result() 函数将会被调用两次。第一次,auth.packet:byte() 的值将会等于 254 ,表明客户端应该使用老版本的密码协议再尝试一次。第二次调用 read_auth_result() 函数时,auth.packet:byte() 的值将会指出鉴权是否真正成功。

时间: 2024-12-02 04:47:20

【原创】MySQL Proxy - read_auth_result()的相关文章

原创】MySQL Proxy - 架构篇

架构篇(architecture)         MySQL Proxy 的定位是存在于 mysql client 和 mysql server 之间的一个简单的程序,能够对从其上通过的数据进行检查.转换和直接进行相应操作.  应用范围包括:  负载均衡(load balancing) 故障处理(fail over) 查询追踪(query tracking) 查询分析(query analysis) (...)        内部实现上讲,MySQL Proxy 是这样的一个协议栈:  (应该

【原创】MySQL Proxy - 脚本

       你可以通过使用嵌入式 Lua 脚本语言对 MySQL Proxy 的行为进行控制,以使得其能够对发送给 MySQL 服务器的 query 和 response 进行操纵.  下图展现了 MySQL Proxy 中使用的类的总览.           在 MySQL Proxy 和服务器之间的主要交互功能是通过 Lua 脚本定义的一个或者多个函数.根据客户端与一个或者多个 backend MySQL servers 之间通信序列中不同的事件和操作,定义如下一些关键函数:  conne

【原创】MySQL Proxy - 内部结构

        在 MySQL Proxy 的脚本元素中有一些基本的内部结构需要知道.其中最主要的结构就是 proxy ,其提供了访问贯穿脚本中的许多公共结构的接口,例如连接列表和配置的 backend server .其他结构,例如来自客户端的包和返回的结果集等,只有在具体的脚本函数的上下文环境中才是可以访问的.  下表中描述了 MySQL proxy 脚本元素的公共属性.  Attribute Description connection A structure containing the

【原创】MySQL Proxy中socketpair的使用

      学习 MySQL Proxy 0.8.3 的源码后可知,其全部事件处理线程均对全局 socketpair 的读端进行了监听,以实现通知管道的功能:threads->event_notify_fds[0] .  ? 1 2 3 4 5 6 7 8 9 10 11 12 13 int chassis_event_threads_init_thread(chassis_event_threads_t *threads, chassis_event_thread_t *event_threa

【原创】MySQL Proxy - 底层实现篇

底层实现篇(chassis)     [ Configfile and Commandline Options]           glib2 提供了 config-file 解析和 command-line option 解析功能. 其提供了将 option 以相同方式暴露给调用者的方法,以及从 Configfile 和 Commandline 获取 option 的功能.    所有 option 的解析过程都可以分为三步: 1. 提取   command-line 上的 basic op

【原创】MySQL Proxy - query注入动作中的脚本序列

    下图展示了一个如何使用 proxy 将客户端发送过来的 query 注入到 query 队列的例子.因为 proxy 位于客户端和 MySQL 服务器之间,所以经由 proxy 发送到服务器,以及由 proxy 最终返回给客户端的信息,不需要做到完全匹配或者关联.一旦客户端连接到了 proxy ,下图中展现的由客户端发送每一个单独的 query 引起的命令序列将会发生.           当客户端向 proxy 提交了一个 query 的时候,proxy 内部的 read_query(

【原创】MySQL Proxy - 核心篇

核心层篇(Core)          Network Core 构建于 socket 处理实现的基础之上,将 client connection 和 server connection 关联到一起.     [Connection Life Cycle]    connection 可处于下面 4 种协议基本 phase 之一:    connect authentification query disconnect        通过对 plugin 功能的定制实现,可以改变 network

【原创】MySQL Proxy - 使用

       存在许多种使用 MySQL Proxy 的不同方法.采用最基本用法,你可以允许 MySQL Proxy 将来自客户端的 query 透传到后端的一个服务器.如果打算让 MySQL Proxy 在这种模式下工作,你只需要在命令行上指定 proxy 打算连接的 backend server 的信息:  ? 1 shell> mysql-proxy --proxy-backend-addresses=sakila:3306        如果你指定了多个后端 MySQL 服务器,prox

【原创】MySQL Proxy - 概况

       MySQL Proxy 是一种在网络上使用 MySQL 网络协议进行通信的应用,提供了一或多个 MySQL server 与一或多个 MySQL client 之间的通信功能.由于 MySQL Proxy 使用的是 MySQL 网络协议,故其可以在不做任何修改的情况下,配合任何符合该协议的且与 MySQL 兼容的客户端一起使用.这其中也包括 MySQL 的命令行客户端,任何使用了 MySQL 客户端库的客户端,以及任何支持 MySQL 网络协议的连接器(connector).