如何在Percona审计日志记录中添加自定义连接变量数据?
没问题,Percona审计日志插件完全支持把这类连接变量纳入审计记录,具体可以这么操作:
确保插件版本与基础配置
优先使用Percona Audit Log Plugin 1.4及以上版本(新版本对会话变量的支持更完善),先确认插件已安装启用:INSTALL PLUGIN audit_log SONAME 'audit_log.so'; SET GLOBAL audit_log = ON;也可以把
audit_log=ON加到my.cnf配置文件中,确保MySQL重启后插件依然生效。记录SET变量的操作
要先把SET语句纳入审计范围,调整audit_log_events参数,包含QUERY事件:SET GLOBAL audit_log_events = 'CONNECT,QUERY,DISCONNECT';这样所有执行的
SET语句(比如你设置应用用户的SET @app_user = 'xxx';)都会被记录到审计日志里,能清晰看到哪个连接设置了什么变量值。把变量值附加到后续审计记录
如果想让每条后续操作的审计记录都直接带上这个应用用户变量的值,不用单独回溯SET语句,可以用Percona的audit_log_filter功能创建过滤规则:- 创建过滤规则,指定要将会话变量注入到日志的自定义字段:
SELECT audit_log_filter_set_filter('attach_app_user', '{ "filter": { "log": true, "extra_fields": { "app_user": "@app_user" } } }'); - 把这个规则绑定到你的数据库连接用户
web:SELECT audit_log_filter_set_user('web', 'attach_app_user');
之后所有来自
web用户的连接,只要设置过@app_user变量,后续的每一条审计记录都会额外带上app_user字段,直接显示当前的应用用户值。- 创建过滤规则,指定要将会话变量注入到日志的自定义字段:
验证效果
执行SET @app_user = 'test_user';,再运行几个业务查询比如SELECT * FROM your_table;,然后查看MySQL数据目录下的audit.log文件,就能看到每条记录里都有app_user: test_user这类字段了。
注意:如果用的是系统会话变量(比如SET SESSION ...),也可以在过滤规则里用对应的变量名替换@app_user,插件同样能识别并注入。
内容的提问来源于stack exchange,提问作者Jovan Perovic

