MySQL5.5的audit plugin

在MySQL5.5的版本中,增加了一个新的插件:audit plugin,用于对mysql的操作进行审计

相关代码:

sql/sql_audit.cc

plugin/audit_null文件夹下,有1个样板程序文件audit_null.c,主要包括四个函数:

1).audit_null_plugin_init:加载插件

2).audit_null_plugin_deinit:卸载插件

3).audit_null_notify: 实际执行具体功能的函数,参数包括thd以及event

4).mysql_declare_plugin:声明插件,用于描述该插件,如下


除了上述函数外,还定义了插件的类型描述符:


以及show status时所显示的内容:


这些函数会在sql/sql_audit.cc文件中以函数指针的形式被调用。下面是我参考网上的一个样例写的程序

这个程序实现了将mysql_event_general结构体的general_query字段写到一个日志文件里的功能




-----------------------------------------------------------------------------------------------------------------------------------------------

然后直接make && make install,生成的adt_null.so文件会被复制到安装目录/lib/plugin下


进入mysql,执行:


mysql> install plugin NULL_AUDIT soname 'adt_null.so';
Query OK, 0 rows affected (0.00 sec)


然后执行一系列的操作!我们会发现在tmp文件夹下创建了一个audit_null.log文件夹,记录了所有的操作命令

mysql> SHOW STATUS LIKE 'Audit_null%';
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+
| Audit_null_called | 44 |
| Audit_null_general_error | 0 |
| Audit_null_general_log | 0 |
| Audit_null_general_result | 0 |
+---------------------------+-------+
4 rows in set (0.00 sec)


最后:

在定义notify 函数的时候,可以看到参数为THD,由于THD结构体中记录了非常丰富的信息,因此我们可以实现一些非常有趣的功能,比较记录执行命令的用户名和域名,进行审计!

下一步,将分析MySQL源代码如何实现audit功能的,以对其进行修改,适应业务需求

你可能感兴趣的:(plugin)