mysql-5.7.5-labs-http-documentation中文翻译-第二章 基本概念

2.1 它是如何工作的

Mysql支持了一个创建服务器组件的插件API,现已经有很多类型的插件,类似存储引擎插件,全文解析插件,授权认证插件,守护进程插件等等等等。守护进程插件并不是为具体的服务器功能而定制的。一个守护进程插件可以被任何应该运行在服务器上的代码使用。

我们的HTTP插件其实就是一个守护线程插件。与其他所有插件类似,守护线程插件并不依赖于Mysql服务器相关运行作用域。

为了说明HTTP插件的工作原理,可以认为其由两个内置模块组成:一个HTTP服务器模块和一个核心模块。

当插件被载入到Mysql时,这个HTTP服务器模块就被启动了。从一开始,它就一直在监听HTTP请求,解析他们并触发回调函数一实时的应答。这些回调函数在核心模块中运行,他们可以决定是否要返回错误的信息,是否要拒绝去执行SQL语句,以及返回HTTP客户端从HTTP服务模块那获取到的结果。HTTP服务器模块实现了不用使用场景下的不同用户的API。SQL的内部使用就是将其暴露出不同的程度出来。举例来说:JSON文档的API目的是为了对所有用户隐藏SQL的使用。

HTTP服务器模块是使用PION HTTP库构建出来的。PION是一个用于开发HTTP服务的C++库。HTTP库是利用异步接口实现多线程的库。

插件可以使用各式各样的Mysql提供的内置服务插件。HTTP插件使用的是一个新的SQL执行服务插件。服务允许各插件像某些Mysql用户一样通过定义良好的接口去执行任意的SQL语句。Mysql将以二进制流的形式返回SQL语句的执行结果到插件。

HTTP核心模块插件使用服务来应答HTTP请求。所有的请求都被映射成为了合适的SQL语句。然后核心HTTP模块插件序列化这些结果为JSON数据。

这些新的执行服务插件暂仍处于开发版下并且仅仅在这个实验室发布版上可用。这也是为什么你不能使用该HTTP插件去预览别的任何一个Mysql版本,而只能是该版本。

以下所介绍的模式有可能和其他网络协议一样扩展Mysql。举例来说:结合轻量级的和快速的拥有丰富查询SQL功能网络套接字协议,可以快速开发出守护线程插件出来。

2.2与web服务的安全性比较

这个HTTP插件在Mysql之上提供了一个与标准多层web服务相似的安全水平。

当我们的插件接收到了Request请求,这个请求将以特定的HTTP方法被授权。这个唯一的HTTP认证机制将被我们的实验室发布版本支持,这也是基本的认证机制。我们的这套基本的HTTP认证机制现在还不完善,只提供一些简单的使用方法。

HTTP(S)SSL可用于加密通信信道。请一定注意,我们实验室发布版并不包括对SSL支持的封装。现在只有当使用OpenSSL时,SSL才是可用的。遗憾的是,我们release版本并不对OpenSSL做支持。

针对web服务进行成功的HTTP授权之后,web服务的一些方法将会被调用,这些方法将更进一步的对请求进行验证和清理。当我们使用HTTP插件,同样的事情将会发生:HTTP请求将被解析,验证,以及被映射到内部的一些方法。

在web服务的第二部中,HTTP插件中各自的方法将会去执行SQL语句。这些语句将被代表某个确定的Mysql用户执行,用户必须是经过认真的,且被Mysql授权。标准的Mysql用户管理功能可以用来授予用户仅仅当该用户拥有所需的权限。

web服务于HTTP插件连接Mysql数据库的方式是不同的。web服务必须建立到Mysql的外部通信通道,这个通道必须是安全的。比如SSL可以被使用。而HTTP插件是在Mysql服务器的内部作用域进行操作,使用的内部的接口去执行SQL语句,就像是一个真实的Mysql用户。

通常,web服务是建立在Mysql之上的,HTTP插件可以达到与web服务相似的安全等级,因为他们使用相似的两个安全策略阶段。然而,必须要注意,我们的HTTP插件尚处于开发阶段,它在成熟度与功能上不能完全匹配web服务。

需要引起注意的是,HTTP基本认证机制允许用户名和密码作为url的一部分提供,这导致一个可怕的后果,那就是用户的资格证书将在日志文档中出现,也包括在浏览器的历史记录着。未来的版本中会提供更加复杂的HTTP认证方法。

2.3用户有关的概念

关于HTTP插件的用户与安全相关的概念总的来说分为两个阶段。首先,客户端使用HTTP基本验证策略登录到插件本身;然后,如果插件执行SQL语句来应答HTTP请求,这些SQL语句一定程度上代表了一个Mysql用户的具体问题,而这个用户取决于是否使用了SSL/HTTPS是否被使用。

每个资源都处于HTTP插件的基本认证机制的保护下。HTTP基本认证机制的使用是强制性的,必须使用。所有的HTTP插件服务器下的资源都被同样的安全证书保护。用户名与密码的HTTP基本验证是通过服务器变量myhttp_basic_auth_user_name和myhttp_basic_auth_user_passwd来完成的。

如果没有SSL用于Request,并且HTTP插件在基础验证通过之后查找并执行SQL,则插件登录到Mysql就像是一个真实存在的用户。Mysql标识用户是通过主机地址,用户名,密码。Mysql用户的主机、用户名、密码被HTTP插件配置使用,是通过服务器变量myhttp_basic_auth_user_host、myhttp_basic_auth_user_name和myhttp_basic_auth_user_passwd。通过这个方式,Mysql用户的安全证书就不会被暴露在没有被保护的HTTP交互下。未加密的HTTP通信将只显示HTTP基本安全证书,即那些用来授权HTTP插件本身的一些东西。

为了通过HTTP插件作为一个不同的预定义用户来执行SQL,必须启用SSL支持并且处理HTTPS请求。防止插件使用通过HTTP基本认证和HTTP请求出获取的主机、用户名、密码来登录到Mysql。这里呢,基本的认证仅仅只是一个轮子用于提供Mysql安全证书。当使用本地认证机制时,安全等级与标准的客户端到Mysql的连接是具有可比性的。如果,仅仅是如果,Mysql的客户端服务端协议连接是加密的并且被SSL所保护,密码从客户端被发送到服务器不会使用更进一步的加密。

目前,是不可能使用SSL和对具体Mysql用户的限制。如果SSL启用了,所有的Mysql用户都可以登录,我们希望进一步发展用户的概念,并对其给予更多的控制。

仅仅只是Mysql用户使用Mysql本地的密码加密。对于在没有SSL连接并且所有其他用户有SSL连接的情况下的默认用户,这种方式是对的。

2.4线程模型

用于处理HTTP客户端的线程模型相比于处理标准Mysql客户/服务协议客户端模型,要复杂的多。MySql处理标准的客户端的连接的方式是针对每个连接都使用一个单独的线程,这个线程会处理IO操作以及执行各客户端命令。HTTP插件使用各不相同的线程来处理客户端请求和SQL语句。每个HTTP插件线程独立的处理IO操作以及SQL命令。

当我们的HTTP插件被载入到Mysql服务器,HTTP库就开始创建处理连接的线程了。借住与到HTTP客户端的连接,HTTP库调用插件核心模块的各方法。接下来核心模块将会决定是否去创建Mysql线程来执行SQL语句。Mysql线程会被初始化,并为执行SQL做好一切准备。接着就是SQL语句被执行,并且结果通过HTTP库的IO线程被发送到客户端。当所有结果值都被发送完毕,Mysql线程也就被销毁了。

关于SQL语句执行处理连接的分离将会影响到可插拔认证机制在标准Mysql客户端、查询缓存以及商业连接池中的使用。所有这些Mysql服务器模块需要一些通过网络IO抽象层在服务模块到客户端模块之间的连接。因为HTTP客户端被处理为使用HTTP库,标准的网络IO抽象层对于这些服务器模块来说并不是可用的。这也影响到以下的服务器模块:
1、Mysql可插拔的认证机制提供了使用握手协议的方法来交换密码和其他信息。Mysql认证插件使用IO接口来交换信息,而这并没有被HTTP库提供。
2、Mysql从IO抽象层标准连接的的查询缓存是已经功能化了的。因为我们的IO抽象层对HTTP连接并不是可用的,HTTP插件在执行SQL时明确的禁用查询缓存。
3、商业的线程池插件需要对标准连接IO抽象层的使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值