mysql审计插件安装_MySQL审计插件安装使用说明文档

本文详细介绍了MySQL审计插件的设计思想、审计粒度、安装使用方法及配置说明,旨在帮助开发者和DBA更好地理解和使用审计功能。审计粒度包括多种SQL语句类型,粒度可通过配置文件定制。安装过程涉及源码编译和二进制安装,并提供了卸载插件的方法。同时,文章还展示了审计日志的连接审计和操作审计两种文件格式。
摘要由CSDN通过智能技术生成

目的

为了便于开发人员和DBA安装和使用MySQL审计插件,并对审计的使用和审计粒度有更全面的理解。本文对审计插件的设计思想、审计粒度、审计配置说明、安装使用、其他内容进行详细的描述。一方面便于后续的维护和开发,另一方面对于使用提供便利的查询。

设计思想

MySQL的审计接口为开发审计插件提供了有利的条件,基于MySQL审计接口,参考General log设计思想,将审计插件的审计类型定义了:FILE和TABLE两种类型,用于将审计的内容分别写入日志文件或数据库表。此外,对审计的粒度进行划分,不仅根据操作命令的类型进行划分,并对Query命令类型进行进一步的细化分,将DDL、DML、DCL三种类型不同SQL语句类型进行划分;对特定的用户进行审计,仅对指定的用户审计,结合审计的粒度实现对用户行为的审计;对特定的对象(数据库、数据表)进行审计,目前仅给出配置,源码中暂时没有实现。

此外,审计的粒度采用按位标示,并通过按位覆盖可以进行自定义的审计粒度。

审计粒度

审计插件将审计的粒度细化到具体的SQL语句,主要包括:create、drop、alter、ddl(包括create、drop、alter)、insert、delete、update、modify(包括insert、delete、update、replace)、select、dml(包括insert、delete、update、select)、grant、revoke、dcl(包括grant、revoke)、set、cmd(包括ddl、dml、dcl、set)、connect、quit、connection(包括connect、quit)、server(包括修改server相关的命令操作,如init db、sleep等操作)、full(包括以上所有操作)、all(包括所有操作,包括预留的所有的审计粒度的扩展)、none(不进行审计),这些粒度在配置文件中的以audit_为前缀,值为1/0(或on/off)。为了更精确的控制某些命令,提供audit_ops参数,该参数的值是整数,通过整数的二进制位来控制具体的审计粒度。

具体的审计粒度对应整数的二进制位如下所示:

粒度

位值

(~AUDIT_NONE)

AUDIT_NONE

(ulonglong)0

AUDIT_CREATE

(ulonglong)1

AUDIT_ALTER

(AUDIT_CREATE <<

1)

AUDIT_DROP

(AUDIT_CREATE <<

2)

AUDIT_DDL

(AUDIT_CREATE | AUDIT_ALTER

| AUDIT_DROP)

AUDIT_INSERT

(AUDIT_CREATE <<

3)

AUDIT_UPDATE

(AUDIT_CREATE <<

4)

AUDIT_REPLACE

(AUDIT_CREATE <<

5)

AUDIT_DELETE

(AUDIT_CREATE <<

6)

AUDIT_MODIFY

(AUDIT_INSERT | AUDIT_UPDATE

| AUDIT_DELETE | AUDIT_REPLACE)

AUDIT_SELECT

(AUDIT_CREATE <<

7)

AUDIT_DML

(AUDIT_MODIFY | AUDIT_SELECT)

AUDIT_GRANT

(AUDIT_CREATE <<

8)

AUDIT_REVOKE

(AUDIT_CREATE <<

9)

AUDIT_DCL

(AUDIT_GRANT | AUDIT_REVOKE)

AUDIT_SET

(AUDIT_CREATE <<

10)

AUDIT_CMD

(AUDIT_DDL | AUDIT_DML

| AUDIT_DCL | AUDIT_SET)

AUDIT_CONNECT

(AUDIT_CREATE <<

11)

AUDIT_QUIT

(AUDIT_CREATE <<

12)

AUDIT_CHANGE_USER

(AUDIT_CREATE <<

13)

AUDIT_CONNECTION

(AUDIT_CONNECT |

AUDIT_QUIT | AUDIT_CHANGE_USER)

AUDIT_FULL

(AUDIT_CMD | AUDIT_CONNECTION)

AUDIT_SLEEP

(AUDIT_CREATE <<

16)

AUDIT_INIT_DB

(AUDIT_CREATE <<

17)

AUDIT_FIELD_LIST

(AUDIT_CREATE <<

18)

AUDIT_REFRESH

(AUDIT_CREATE <<

19)

AUDIT_SHUTDOWN

(AUDIT_CREATE <<

20)

AUDIT_STATISTICS

(AUDIT_CREATE <<

21)

AUDIT_PROCESSLIST

(AUDIT_CREATE <<

22)

AUDIT_KILL

(AUDIT_CREATE <<

23)

AUDIT_DEBUG

(AUDIT_CREATE <<

24)

AUDIT_PING

(AUDIT_CREATE <<

25)

AUDIT_TIME

(AUDIT_CREATE <<

26)

AUDIT_DELAY_INSERT

(AUDIT_CREATE <<

27)

AUDIT_BINLOG_DUMP

(AUDIT_CREATE <<

28)

AUDIT_TABLE_DUMP

(AUDIT_CREATE <<

29)

AUDIT_CONNECT_OUT

(AUDIT_CREATE <<

30)

AUDIT_REGISTER_SLAVE

(AUDIT_CREATE <<

31)

AUDIT_PREPARE

(AUDIT_CREATE <<

32)

AUDIT_EXECUTE

(AUDIT_CREATE <<

33)

AUDIT_LONG_DATA

(AUDIT_CREATE <<

34)

AUDIT_CLOSE_STMT

(AUDIT_CREATE <<

35)

AUDIT_RESET_STMT

(AUDIT_CREATE <<

36)

AUDIT_SET_OPTION

(AUDIT_CREATE <<

37)

AUDIT_FETCH

(AUDIT_CREATE <<

38)

AUDIT_DAEMON

(AUDIT_CREATE <<

39)

AUDIT_ERROR

(AUDIT_CREATE <<

40)

AUDIT_SERVER

(~AUDIT_FULL)

以上定义中,预留了很多位,用于粒度的深化。audit_ops的指定有一定的风险,需要进行计算,不建议直接控制。

审计配置说明

为了审计插件的独立性,对审计进行单独配置文件的控制,从而不影响数据库server的配置。此外,审计的配置与审计粒度、审计用户、审计文件地址、审计文件名、审计文件大小、审计类型有关。

审计用户格式为“,”分割的用户名列表;审计文件地址在linux下必须为mysql用户名和用户组,且mysql至少有W访问权限,如果指定审计文件大小,则需要有X权限;

审计文件名默认为mysql-audit,并且根据是否设置审计文件大小来创建文件。如果设置审计文件的大小,那么审计文件以日期为文件夹,以文件编号为后缀,且文件达到指定文件大小后,重新创建文件且文件编号递增。如:2012-6-20/mysql-audit.000000,如果未设置文件大小,则文件名以当前日期为后缀,如:mysql-audit. 2012-6-20;

审计文件大小格式为整数,或者整数加上单位,单位包括K、M、G。为了便于查看,不建议将该值设置的过大;

审计类型包括FILE、TABLE两种。目前仅FILE有效。

此外,配置文件支持动态修改并生效的功能。审计配置文件修改后,将会重新加载配置选项。但鉴于性能问题,不建议频繁对配置文件进行修改。

安装使用

1源码安装

针对不同的MySQL源码和不同操作系统,建议使用源码进行编译安装。该插件基于Linux 64位操作系统、MySQL 5.5.15/5.5.20源码进行编译和测试通过,并提供二进制动态库供二进制安装,具体二进制安装见下一节内容。

1.1源码获取

1)审计插件源码

审计插件源码可以通过github获取最新版本。

github地址为:https://github.com/HengWang/mysql-audit。

github clone https://github.com/HengWang/mysql-audit

2)MySQL源码

MySQL源码可以从官网下载,本文推荐使用Percona Server 5.5版本。推荐理由是Percona Server针对MySQL源码基础之上,进行了改进,尤其是性能方面和参数选项方面。

1.2拷贝插件源码

1)解压数据库源码

tar -xzf Percona-Server-.tar.gz

2)拷贝插件到源码

cp -rf mysql-audit/

Percona-Server-/plugin/

将插件源码拷贝到mysql数据库源码的plugin文件夹下。

1.3、编译数据库源码

根据编译参数,对数据库源码进行编译,并安装。

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql

make

make install

安装完成后,在MYSQL_HOME(安装路径,文中设置为/usr/local/mysql)的lib/plugin/下面,会有audit.so和audit.cnf文件。

1.4设置审计参数

根据审计需求,修改审计配置文件audit.cnf,对审计的选项参数、审计粒度进行设置。配置文件中对各个审计参数的功能进行了描述,可根据具体的需求设置。

1.5创建审计路径

根据配置文件中设置的audit_dir的路径,创建审计文件夹。审计文件夹必须是mysql可操作的文件夹,如果指定了审计文件大小,指定的审计文件夹对mysql必须有xw权限。

1.6创建审计数据表

启动MySQL数据库,使用mysql客户端登陆数据库,执行sql脚本audit.sql,创建mysql.audit表,用于存储审计内容。

1.7安装审计插件

启动MySQL数据库,使用mysql客户端登陆数据库后,执行安装插件命令。如下所示:

install plugin audit soname ‘audit.so’;

安装完成后,会在指定审计文件夹下,生成.文件或/.000000。如果文件不存在,表示安装失败。

2二进制安装

二进制动态库目前仅提供基于Linux

64位操作系统、MySQL 5.5.15/5.5.20源码进行编译的审计插件动态库。

在mysql-audit/script文件夹下,有对应的二进制库;mysql-audit/etc文件夹下,有配置文件。配置文件audit.cnf拷贝到MYSQL_HOME/lib/plugin/下,二进制库拷贝到MySQL Server的plugin_dir指定的地址。

接下来的操作与源码安装一致,从步骤1.4开始进行下面操作即可。

3自动化安装部署

自动化安装部署,主要针对二进制文件的安装,通过执行脚本即可实现整个安装部署过程。因此,使用自动化脚本的前提是提供的二进制文件符合应用需求。具体如下:

执行脚本的前提是已经获取mysql-audit。在此情况下,执行自动化脚本,可以安装部署成功。

具体脚本操作,可以通过执行:audit_build.sh

-h查看输入参数。举例如下:

./audit_build.sh --mysqldir=/usr/local/mysql

--auditdir=/home/mysql/audit --user=root --password=”” --host=localhost

--port=3306 --socket=/tmp/mysql.sock --version=5.5.20 --type=release

4插件卸载

为了保证数据库的性能,可以卸载审计插件。使用mysql登陆数据库服务器,执行以下命令:

uninstall plugin audit;

文件输出格式

文件格式分为两种,分别为连接审计和操作审计。

1、连接审计

连接相关的审计日志信息的格式如下所示。

具体的:

[2012-06-20 15:40:39]:审计的时间。

[CONNECT]:为连接的类型;

status:为连接成功(0)或者失败(错误号)的状态;

user:为连接的用户名;

external-user:为外部连接的用户,在使用中间件或者代理服务的时候有效;

proxy-user:为代理服务的用户名;

host:表示连接的主机名;

ip:连接的ip地址;

database:表示连接的数据库名。

[2012-06-20 15:40:39] [CONNECT] status: # ;

thread_id: # ; user: XXX ; external-user: XXX ; proxy-user: XXX ; host: XXX ;

ip: ###.###.###.### ; database: XXX

2、操作审计

操作相关的审计日志信息的格式如下所示。操作相关的命令包括CREATE、DROP、ALTER、INSERT、UPDATE、DELETE、GRANT、REVOKE等对数据或数据库有影响的操作。以下以CREATE为例,进行详细说明。

具体的:

[2012-06-20 15:40:39]:审计的时间。

[CREATE]为操作的类型;

error_code:为操作的错误码,操作成功为0;

thread_id:执行操作的线程id;

user:执行操作的用户名;

command:操作命令的类型,是数据库内部的定义,数据相关操作一般为Query;

query:操作的查询语句。

charset:操作的字符集类型;

time:执行操作的时间点,该值为从1970年以来的长整数。

rows:执行操作影响数据的行数。

[2012-06-20 15:40:39] [CREATE] error_code: # ;

thread_id: # ; user: XXX ; command: XXX ; query: XXX ; charset: XXX ; time: ###

; rows: #

数据表定义

CREATE TABLE mysql.audit (

`audit_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

`command`

varchar(20) NOT NULL DEFAULT 'NULL',

`status`

int(11) NOT NULL DEFAULT '0',

`thread_id` bigint(32) unsigned NOT NULL DEFAULT '0',

`user`

varchar(20) NOT NULL DEFAULT 'NULL',

`external_user`

varchar(20) NOT NULL DEFAULT 'NULL',

`proxy_user` varchar(20) NOT NULL DEFAULT 'NULL',

`host`

varchar(20) NOT NULL DEFAULT 'NULL',

`ip`

varchar(20) NOT NULL DEFAULT 'NULL',

`query`

varchar(255) NOT NULL DEFAULT 'NULL',

`charset`

varchar(20) NOT NULL DEFAULT 'NULL',

`event_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',

`rows`

bigint(32) NOT NULL DEFAULT '0'

) ENGINE=CSV DEFAULT CHARSET=utf8 ;

常见错误

1、无法识别的audit.so。

解决:查看plugin_dir路径,在该路径下查看audit.so是否存在。

2、没有审计内容。

解决:首先确认指定的审计文件夹的权限是否符合,审计文件夹必须是mysql用户可以操作的目录,如果指定了审计文件大小,指定的审计文件夹必须有xw权限。

进一步工作

1、添加审计数据对象(数据库、数据表)功能。

2、完善查看审计参数状态,show

status like ‘audit%’中动态显示当前参数状态。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值