欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL Audit Plugin的简单应用

程序员文章站 2022-05-08 16:22:10
...

基于MySQL服务器安全性需求,我们需要部署一套安全审计机制,以便当服务器出现用户活跃访问数据库、用户修改表结构、大批量数据修改等等危险操作时,我们可以进行实时的监控,报警。对于事后问题处理,有据可查。

MySQL5.5之前,MySQL本身缺少一套的对服务器操作的审计机制,对于非法或者危险的操作、错误捕捉、登录审计尚不能很好的支持。当出现drop了一个表或者不慎不带where的删除表数据等危险操作时,应该被明确的记录下来。

MySQL5.5里,添加了额外的流程来对这些我们所关心的地方进行事件捕获;然后将捕获到的事件传递给Audit Plugin;而Audit Plugin所要做的,就是对这些事件进行判别,并做必要的反应,比如记录到log或发送一个报警。

 

Audit Plugin基本工作流程:


MySQL Audit Plugin的简单应用
            
    
    博客分类: MySQL MySQL安全审计 
 

Audit Plugin内部实现:

sql/sql_audit.cc 该文件定义了audit插件的接口函数;

sql/sql_audit.h 该文件申明函数,并定义了函数mysql_audit_general_log,在触发audit时,首先调用的就是该函数;

audit_null.c 模版程序,给出了最基础的audit插件所需要定义的接口,程序audit_null.c中包括了两个必备头文件mysql/plugin.hmysql/plugin_audit.h

新增加的审计插件,其实现思想是在内核代码的不同位置增加相应的接口函数,具体实现在sql_audit.ccsql_audit.h文件。在/plugin/audit_null/文件夹下的样本程序文件audit_null.c(对该文件进行编译之后生成so文件即是我们所需的插件,MySQL5.5.23模版so文件为adt_null.so),插件名字为NULL_AUDIT


在模板程序audit_null.c 的基础上,我们编辑了符合自己业务需求的程序,主要对audit_null_notify函数进行了相应更改,能够实现通过配置文件读取条件,对来自指定用户和访问IP的数据库操作情况进行记录,包括操作时间、用户名、操作语句记录、影响行数。

 

配置文件形式如下:

[log]

file = /var/lib/mysql/my_audit.log

[audit1]

user = un_

[audit2]

user = us_

[audit3]

user = uapp_

ip = 192.168.XX

 

用sysbench工具对审计插件进行性能测试后发现,当安装了自定义审计插件后,如果完全没有需要审计的内容,则几乎没有性能损失,约为0.1%;如果所有的操作都需要进行记录,则性能会下降30%左右,这些性能损失应该主要来自于IO消耗。

 

后一种场景的测试信息如下:

 

测试服务器

vms00XXX (5.5.21)

硬件配置

CPU 2核 内存 4G

表数据量

100

并发线程数

200

测试时间

10分钟*3

测试帐号

符合审计条件

 

 

queries performed

未使用插件

使用插件

降幅

read

1876910

1287524

31.40%

write

670325

459830

31.40%

other

268130

183932

31.40%

total

2815365

1931286

31.40%

transactions

134065 (223.37 per sec.)

 91966  (153.23 per sec.)

31.40%

deadlocks

0      (0.00 per sec.)

0      (0.00 per sec.)

31.40%

read/write requests

2547235 (4244.01 per sec.)

1747354 (2911.32 per sec.)

31.40%

other operations

268130 (446.74 per sec.)

183932 (306.45 per sec.)

31.40%

 

  • MySQL Audit Plugin的简单应用
            
    
    博客分类: MySQL MySQL安全审计 
  • 大小: 9.2 KB