在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功能的,以对其进行修改,适应业务需求