MySQL Audit Plugin的简单应用

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

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

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

 

Audit Plugin基本工作流程:



 

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%

 

<think>好的,我现在需要帮助用户在Docker中为MySQL 5.7安装audit plugin。首先,我得回忆一下MySQL审计插件相关知识。记得MySQL企业版有官方的审计插件,但社区版可能需要用第三方插件,比如MariaDB的server_audit。用户用的是MySQL 5.7,可能需要确认插件的兼容性。 接下来,用户使用的是Docker环境,所以需要思考如何在容器中安装插件。通常的步骤可能是:获取插件文件、修改MySQL配置、加载插件。但Docker容器是无状态的,每次重启可能会重置,所以需要持久化数据和配置。 首先,用户需要创建一个自定义的Docker镜像。他们可能需要编写Dockerfile,基于官方的MySQL 5.7镜像,然后在其中添加插件。或者,他们可以在运行容器时挂载插件文件到指定目录,比如/usr/lib/mysql/plugin/。不过,MySQL可能需要插件文件位于特定位置,可能需要复制到容器内的目录。 然后,获取插件文件。如果是MariaDB的server_audit.so,需要确认版本兼容性。可能需要从MariaDB的安装包中提取,或者找到预编译的版本。用户需要下载对应的.so文件,并放入容器的插件目录。 接下来是配置文件。用户需要修改my.cnf,添加加载插件的配置。这可以通过在Dockerfile中替换my.cnf,或者在运行时挂载自定义的my.cnf文件。例如,在[mysqld]部分添加plugin-load-add=server_audit.so和相关的参数,比如server_audit_logging=ON。 此外,权限问题需要注意。容器内的MySQL用户需要有权限读取插件文件和写入审计日志的路径。需要确保挂载的日志目录有正确的权限,或者在容器内部创建相应的目录并设置权限。 测试步骤也很重要。启动容器后,进入MySQL并执行SHOW PLUGINS;确认插件已加载。可能需要检查日志文件是否存在,以及审计功能是否正常工作。 另外,用户可能遇到插件加载失败的情况,比如版本不兼容或路径错误。这时候需要查看MySQL的错误日志,排查问题。可能需要尝试不同的插件版本,或者调整配置。 最后,考虑到用户可能希望持久化配置,建议使用Docker volumes来保存数据和配置文件,这样即使容器重启,配置也不会丢失。同时,提供Dockerfile示例和运行命令可以帮助用户快速实现部署。 总结步骤:获取插件文件,创建自定义镜像或挂载插件,配置my.cnf,启动容器,验证插件加载,处理可能的错误。需要确保所有步骤符合Docker和MySQL 5.7的环境要求,并注意版本兼容性。</think>### Docker中为MySQL 5.7安装Audit Plugin的步骤 #### 一、获取审计插件文件 1. **MariaDB审计插件**:MySQL社区版可使用MariaDB的`server_audit.so`插件,需下载对应版本(建议选择与MySQL 5.7兼容的版本,如v1.4.0)。 - 从MariaDB官网下载RPM包后提取文件: ```bash rpm2cpio mariadb-10.6.11-linux-x86_64.rpm | cpio -idmv cp ./usr/lib64/mysql/plugin/server_audit.so ./server_audit.so ``` #### 二、构建自定义Docker镜像 1. **目录结构准备**: ```bash mkdir -p mysql-audit/{conf,plugins,logs} ``` - `conf`: 存放自定义的`my.cnf` - `plugins`: 存放`server_audit.so` - `logs`: 审计日志存储目录 2. **编写Dockerfile**: ```dockerfile FROM mysql:5.7 COPY conf/my.cnf /etc/mysql/conf.d/ COPY plugins/server_audit.so /usr/lib/mysql/plugin/ RUN chmod 644 /usr/lib/mysql/plugin/server_audit.so ``` 3. **配置文件`my.cnf`**: ```ini [mysqld] plugin-load-add = server_audit.so server_audit_logging = ON server_audit_events = CONNECT,QUERY server_audit_file_path = /var/log/mysql/audit.log ``` #### 三、启动容器并验证 1. **构建并运行容器**: ```bash docker build -t mysql5.7-audit . docker run -d \ -v $(pwd)/logs:/var/log/mysql \ --name mysql-audit \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql5.7-audit ``` 2. **进入容器验证插件**: ```bash docker exec -it mysql-audit mysql -uroot -p123456 ``` ```sql SHOW PLUGINS; -- 确认server_audit状态为ACTIVE SELECT * FROM information_schema.server_audit_status; -- 查看审计配置 ``` #### 四、常见问题解决 1. **插件加载失败**: - 检查错误日志:`docker logs mysql-audit` - 确保`server_audit.so`与MySQL 5.7架构匹配(x86_64/ARM) - 确认`my.cnf`路径正确(MySQL 5.7默认加载`/etc/mysql/conf.d/*.cnf`) 2. **日志权限问题**: ```bash docker exec mysql-audit chown -R mysql:mysql /var/log/mysql ``` #### 五、持久化配置(可选) 通过Docker Compose管理服务: ```yaml version: '3' services: mysql: image: mysql5.7-audit volumes: - ./logs:/var/log/mysql environment: MYSQL_ROOT_PASSWORD: 123456 ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值