暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【译】运用基础组件扩展MySQL——第1部分

原创 letitia1208 2022-05-13
442
原文地址:https://lefred.be/content/extending-mysql-using-the-component-infrastructure-part-1/
作者:lefred
发布时间:2022年1月6日

这是 运用基础组件扩展MySQL 系列文章的第一篇。以下列表将随着新文章的发布而更新:

  • Extending MySQL using the Component Infrastructure – part 1
  • Extending MySQL using the Component Infrastructure – part 2: building the server
  • Extending MySQL using the Component Infrastructure – part 3: component services
  • Extending MySQL using the Component Infrastructure – part 4: error logging
  • Extending MySQL using the Component Infrastructure – part 5: privileges
  • Extending MySQL using the Component Infrastructure – part 6: functions
  • Extending MySQL using the Component Infrastructure – part 7: messages to users

在MySQL8.0之前,添加MySQL一个特性,编写插件是唯一的方法。现在可以通过编写一个组件来快速扩展MySQL服务。

MySQL基础组件的设计是为了克服插件子系统的一些架构问题。即:

  • 插件只能与服务器“对话”,而不能与其他插件“对话”
  • 插件可以直接访问服务器符号文件和调用它们(没有封装)
  • 插件没有显式的依赖集,因此很难正确地初始化
  • 插件需要一台运行的服务器才能运转

本文是关于编写第一个可用组件系列文章的第一篇。

我们的组件

为了演示如何创建组件,但我不想创建常见的“hello world”示例。

最近,我收到一个关于如何处理MySQL病毒的问题。通常情况下,在数据插入到数据库之前就应该扫描。但是,能够对存储在MySQL中的数据进行扫描也许是一个不错的想法。

一般情况下,反病毒程序是扫描文件系统上的文件。但是,当文件被压缩或者被加密时,反病毒程序就不起作用了。

这是EIRCAR TEST病毒存储在同一字段的相同表:

标准InnoDB表:

[root@imac virus]# clamscan t1.ibd
/var/lib/mysql/virus/t1.ibd: {HEX}EICAR.TEST.3.UNOFFICIAL FOUND

----------- SCAN SUMMARY -----------
Known viruses: 8763291
Engine version: 0.103.4
Scanned directories: 0
Scanned files: 1
Infected files: 1
Data scanned: 0.11 MB
Data read: 0.11 MB (ratio 1.00:1)
Time: 15.812 sec (0 m 15 s)
Start Date: 2021:12:21 10:44:28
End Date:   2021:12:21 10:44:44

压缩的InnoDB表:

mysql> alter table t1 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;

[root@imac virus]# clamscan t1.ibd
/var/lib/mysql/virus/t1.ibd: OK

----------- SCAN SUMMARY -----------
Known viruses: 8763291
Engine version: 0.103.4
Scanned directories: 0
Scanned files: 1    
Infected files: 0
Data scanned: 0.11 MB
Data read: 0.05 MB (ratio 2.00:1)
Time: 16.338 sec (0 m 16 s)
Start Date: 2021:12:21 11:00:58
End Date:   2021:12:21 11:01:15

加密的InnoDB表:

mysql> alter table t1 encryption='y';

[root@imac virus]# clamscan t1.ibd
/var/lib/mysql/virus/t1.ibd: OK

----------- SCAN SUMMARY -----------
Known viruses: 8763291
Engine version: 0.103.4
Scanned directories: 0
Scanned files: 1
Infected files: 0
Data scanned: 0.22 MB
Data read: 0.11 MB (ratio 2.00:1)
Time: 15.990 sec (0 m 15 s)
Start Date: 2021:12:21 10:53:58
End Date:   2021:12:21 10:54:14

可以看到,扫表文件系统上的.idb文件,当表被压缩或者被加密时,存储在表里同样的病毒,不会被检测到。

因此,我们将通过本系列创建的组建,使用与MySQL安装在同一个服务器上的calmAV库扫描已知病毒数据。

ClamAV®是一种用于各种情况的开源(GPL)反病毒引擎,包括邮件、web扫描以及端点安全。它为用户提供了许多实用工具,包括灵活可伸缩的多线程守护进程、命令行扫描程序和用于自动数据库更新的高级工具。

组件功能:

我们的组件将创建一个用于扫描将数据作为参数发送的函数(类似前面的用户定义函数)来扫描作为参数发送的数据:virus_scan()。

我们的组件还将创建使用新函数所需的新权限:VIRUS_SCAN。

我们的组件还将写信息到MySQL服务器的错误日志中。

我们还将添加一个函数,以便在病毒数据库更新时重新加载clamAV引擎:virus_reload_engine()。

最后,我们的组件将创建两个状态变量,用于存储clamAV加载的漏洞和最终发现的病毒数量:viruscan.clamav_signature & viruscan_virus_found.

开发需求

为了创建组件,我们需要准备MySQL Server的源代码(来自GitGub),clamav-devel 和 clamav-lib。

还需要在安装组件的MySQL服务器上准备clamav-lib。

预告一下,这是我们最后一个组件的概述:
image.png

结论

为了准备下一篇文章,您可以开始下载MySQL Server的源代码了。

在下一篇文章,我们将从源代码搭建MySQL开始配置开发环境。

享受MySQL,准备扩展它吧!

关注我
关注 @lefred

通过电子邮件订阅博客

请输入您的电子邮件地址以订阅本博客,并通过电子邮件接收新文章的通知。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论