1. 前言

        为了安全和操作的可追溯性考虑,越来越多的公司增加了审计功能。mysql5.5推出了相关的审计功能,到5.6.20功能进一步完好。算是勉强可用了。尽管细粒度方面做的不是太好。可是兴许版本号还是能够期待一下的。这里主要介绍下相关的功能和特性。

2. 开启审计

2.1 配置文件载入

mysql5.6中的审计是通过audit_log插件来实现的,我们能够在配置文件里载入该插件来开启。

[mysqld]
plugin-load=audit_log.so

假设希望数据库强制开启审计功能。假设不开启的话server不启动,或者审计功能不能进行时server挂住,增加

[mysqld]
plugin-load=audit_log.so
audit-log=FORCE_PLUS_PERMANENT

2.2 载入插件列表

审计功能的开启还有第二种方式。就是在命令行中安装审计插件。确保在数据库的插件文件夹中存在audit_log.so。[i686数据库的插件文件夹默认是/usr/lib/mysql/plugin,中。也能够指定參数plugin_dir]

mysql> INSTALL PLUGIN audit_log SONAME 'audit_log.so';  

3. 參数介绍

审计參数例如以下:


3.1 audit_log_buffer_size

audit_log_buffer_size :审计缓存。建议设置为4096的倍数,该參数仅仅有在audit_log_strategy为ASYNCHRONOUS时生效。

3.2 audit_log_connection_policy

audit_log_connection_policy:记录了连接审计的信息。包括三个參数

Value Description
ALL Log all connection events
ERRORS Log only failed connection events
NONE Do not log connection events

假设设置了audit_log_policy可能会被覆盖。

3.3 audit_log_current_session

audit_log_current_session:标志当前会话是否进入审计,是个仅仅读參数,仅仅能通过 audit_log_exclude_accounts和 audit_log_include_accounts来控制哪儿些进入会话审计。

3.4 audit_log_exclude_accounts/audit_log_include_accounts

audit_log_exclude_accounts:控制哪儿些用户能够不进入审计。字符串类型,默认能够使用逗号分隔。
audit_log_include_accounts:控制哪儿些用户能够进入审计。字符串类型,默认能够使用逗号分隔。
exclude和include同一时候仅仅有一个參数生效。

3.5 audit_log_file

audit_log_file:能够用于控制审计日志的名称和路径。

3.6 audit_log_flush

audit_log_flush:控制审计日志的归档,仅仅有在audit_log_rotate_on_size=0的时候生效,在手工重命名审计日志归档后。能够指定audit_log_flush=1来生成新的审计日志。

3.7 audit_log_format

audit_log_format:审计日志的格式。分为OLD和NEW(NEW格式在5.6.14才出现)。

当更改格式的时候须要进行3个步骤:

1 :关闭数据库
2:重命名当前的audit.log文件

3:更改audit_log_format參数,并重新启动mysql,重新启动后会自己主动生成一个新的audit.log文件
防止NEW格式和OLD格式在同一个审计日志中。会导致审计功能错误。
audit_log_policy :记录了审计日志的控制策略:
Value Description
ALL Log all events
LOGINS Log only login events
QUERIES Log only query events
NONE Log nothing (disable the audit stream

3.8 audit_log_statement_policy

audit_log_statement_policy:记录了语句的审计策略。可能会被audit_log_policy给覆盖:

Value Description
ALL Log all statement events
ERRORS Log only failed statement events
NONE Do not log statement events

3.9 audit_log_rotate_on_size

audit_log_rotate_on_size:审计日志的文件大小。

当參数大于0的时候,当审计日志超过限制后。会自己主动的重命名为加时间戳后缀的日志文件。同一时候创建新的审计日志。

3.10 audit_log_strategy

audit_log_strategy:审计日志的刷新策略分为:
Value Meaning
ASYNCHRONOUS Log asynchronously, wait for space in output buffer
PERFORMANCE Log asynchronously, drop request if insufficient space in output buffer
SEMISYNCHRONOUS Log synchronously, permit caching by operating system
SYNCHRONOUS Log synchronously, call sync() after each
request

4. 日志格式

审计日志格式是XML的形式,NEW要比OLD的标签具体一些。具体的标签信息例如以下:
实例:
<?xml version="1.0" encoding="UTF-8"?>
<AUDIT>
<AUDIT_RECORD>
<TIMESTAMP>2013-09-17T15:03:24 UTC</TIMESTAMP>
<RECORD_ID>1_2013-09-17T15:03:24</RECORD_ID>
<NAME>Audit</NAME>
<SERVER_ID>1</SERVER_ID>
<VERSION>1</VERSION>
<STARTUP_OPTIONS>/usr/local/mysql/bin/mysqld
--socket=/usr/local/mysql/mysql.sock
--port=3306</STARTUP_OPTIONS>
<OS_VERSION>x86_64-osx10.6</OS_VERSION>
<MYSQL_VERSION>5.7.2-m12-log</MYSQL_VERSION>
</AUDIT_RECORD>
<AUDIT_RECORD>
<TIMESTAMP>2013-09-17T15:03:40 UTC</TIMESTAMP>
<RECORD_ID>2_2013-09-17T15:03:24</RECORD_ID>
<NAME>Connect</NAME>
<CONNECTION_ID>2</CONNECTION_ID>
<STATUS>0</STATUS>
<STATUS_CODE>0</STATUS_CODE>
<USER>root</USER>
<OS_LOGIN></OS_LOGIN>
<HOST>localhost</HOST>
<IP>127.0.0.1</IP>
<COMMAND_CLASS>connect</COMMAND_CLASS>
<PRIV_USER>root</PRIV_USER>
<PROXY_USER></PROXY_USER>
<DB>test</DB>
</AUDIT_RECORD> ... <AUDIT_RECORD>
<TIMESTAMP>2013-09-17T15:03:41 UTC</TIMESTAMP>
<RECORD_ID>4_2013-09-17T15:03:24</RECORD_ID>
<NAME>Query</NAME>
<CONNECTION_ID>2</CONNECTION_ID>
<STATUS>0</STATUS>
<STATUS_CODE>0</STATUS_CODE>
<USER>root[root] @ localhost [127.0.0.1]</USER>
<OS_LOGIN></OS_LOGIN>
<HOST>localhost</HOST>
<IP>127.0.0.1</IP>
<COMMAND_CLASS>drop_table</COMMAND_CLASS>
<SQLTEXT>DROP TABLE IF EXISTS t</SQLTEXT>
</AUDIT_RECORD>
<AUDIT_RECORD>
<TIMESTAMP>2013-09-17T15:03:41 UTC</TIMESTAMP>
<RECORD_ID>5_2013-09-17T15:03:24</RECORD_ID>
<NAME>Query</NAME>
<CONNECTION_ID>2</CONNECTION_ID>
<STATUS>0</STATUS>
<STATUS_CODE>0</STATUS_CODE>
<USER>root[root] @ localhost [127.0.0.1]</USER>
<OS_LOGIN></OS_LOGIN>
<HOST>localhost</HOST>
<IP>127.0.0.1</IP>
<COMMAND_CLASS>create_table</COMMAND_CLASS>
<SQLTEXT>CREATE TABLE t (i INT)</SQLTEXT>
</AUDIT_RECORD> ... <AUDIT_RECORD>
<TIMESTAMP>2013-09-17T15:03:41 UTC</TIMESTAMP>
<RECORD_ID>7_2013-09-17T15:03:24</RECORD_ID>
<NAME>Quit</NAME>
<CONNECTION_ID>2</CONNECTION_ID>
<STATUS>0</STATUS>
<STATUS_CODE>0</STATUS_CODE>
<USER></USER>
<OS_LOGIN></OS_LOGIN>
<HOST></HOST>
<IP></IP>
<COMMAND_CLASS>connect</COMMAND_CLASS>
</AUDIT_RECORD> ... <AUDIT_RECORD>
<TIMESTAMP>2013-09-17T15:03:47 UTC</TIMESTAMP>
<RECORD_ID>9_2013-09-17T15:03:24</RECORD_ID>
<NAME>Shutdown</NAME>
<CONNECTION_ID>3</CONNECTION_ID>
<STATUS>0</STATUS>
<STATUS_CODE>0</STATUS_CODE>
<USER>root[root] @ localhost [127.0.0.1]</USER>
<OS_LOGIN></OS_LOGIN>
<HOST>localhost</HOST>
<IP>127.0.0.1</IP>
<COMMAND_CLASS></COMMAND_CLASS>
</AUDIT_RECORD>
<AUDIT_RECORD>
<TIMESTAMP>2013-09-17T15:03:47 UTC</TIMESTAMP>
<RECORD_ID>10_2013-09-17T15:03:24</RECORD_ID>
<NAME>Quit</NAME>
<CONNECTION_ID>3</CONNECTION_ID>
<STATUS>0</STATUS>
<STATUS_CODE>0</STATUS_CODE>
<USER></USER>
<OS_LOGIN></OS_LOGIN>
<HOST></HOST>
<IP></IP>
<COMMAND_CLASS>connect</COMMAND_CLASS>
</AUDIT_RECORD>
<AUDIT_RECORD>
<TIMESTAMP>2013-09-17T15:03:49 UTC</TIMESTAMP>
<RECORD_ID>11_2013-09-17T15:03:24</RECORD_ID>
<NAME>NoAudit</NAME>
<SERVER_ID>1</SERVER_ID>
</AUDIT_RECORD>
</AUDIT>


    <audit>:文件的根标签为<AUDIT>,并以 </AUDIT>为结束标签

    <AUDIT_RECORD> :包括一系列的必选标签和可选标签。可选标签是否出现取决于audit record类型。

    <NAME>:必选,比如<NAME>Query</NAME>,可能出现的值还包括Audit, Binlog Dump, Change user, Close stmt, Connect Out, Connect, Create DB, Daemon, Debug, Delayed insert, Drop DB, Execute, Fetch, Field List, Init DB, Kill, Long Data, NoAudit, Ping, Prepare, Processlist, Query,
Quit, Refresh, Register Slave, Reset stmt, Set option, Shutdown, Sleep, Statistics, Table Dump, Time.

    <RECORD_ID>:必选,比如<RECORD_ID>28743_2013-09-18T21:03:24</RECORD_ID>。包括一些列数字和时间戳,数字表示的是记录数。每添加一条记录,数字加1.

    <TIMESTAMP>:必选,比如<TIMESTAMP>2013-09-17T15:03:49 UTC</TIMESTAMP>,包括时间戳和时区两部分,记录的是从client接收到的sql运行完时刻的时间。

下面标签audit record类型决定是否出现

    <COMMAND_CLASS>:命令的类型。比如<COMMAND_CLASS>drop_table</COMMAND_CLASS>.

    <CONNECTION_ID>:比如<CONNECTION_ID>127</CONNECTION_ID>,代表client连接标识符的无符号整型数字。

    <DB>:mysql连接的默认数据库名称。该标签仅仅在 <NAME>值是Connect或Change user时出现.

    <HOST>:client端的主机名,该标签仅仅在 <NAME>值是Connect,Change user或Query时出现,比如<HOST>localhost</HOST>。

    <IP>:client端的IP地址,该标签仅仅在 <NAME>值是Connect,Change user或Query时出现,比如<IP>127.0.0.1</IP>。

<MYSQL_VERSION>:mysql版本,仅仅在 <NAME>值是Audit时出现,比如<MYSQL_VERSION>5.7.1-m11-log</MYSQL_VERSION>

    <OS_LOGIN>:外部用户。该标签仅仅在 <NAME>值是Connect。Change user或Query时出现。

<OS_VERSION>:表示执行数据库的server的操作系统。仅仅在 <NAME>值是Audit时出现。比如<OS_VERSION>x86_64-Linux</OS_VERSION>。

    <PRIV_USER>:server认证的client名称。该标签仅仅在 <NAME>值是Connect或Change user时出现。

比如<PRIV_USER>root</PRIV_USER>。

    <PROXY_USER>:通过proxy连接到mysql的用户。该标签仅仅在 <NAME>值是Connect或Change user时出现。

    <SERVER_ID>:mysql数据库server的ID号,该标签仅仅在 <NAME>值是Audit或No Audit时出现。比如<SERVER_ID>1</SERVER_ID>。

<SQLTEXT>:实际运行的SQL语句。该标签仅仅在 <NAME>值是 Query 或 Execute时出现。

比如<SQLTEXT>DELETE FROM t1</SQLTEXT>。

    <STARTUP_OPTIONS>:mysql数据库启动选项,该标签仅仅在 <NAME>值是Audit时出现,比如<STARTUP_OPTIONS>/usr/local/mysql/bin/mysqld --port=3306 --log-output=FILE</STARTUP_OPTIONS>

    <STATUS>:代表sql命令的运行状态,0表示成功,其余表示有错误。比如<STATUS>1051</STATUS>。

    <STATUS_CODE>:代表sql命令的运行状态,0表示成功,1表示有错误。比如<STATUS_CODE>0</STATUS_CODE>。

    <USER>:client连接mysqlserver的username。比如<USER>root[root] @ localhost [127.0.0.1]</USER>。

    <VERSION>:表示日志文件格式的版本。

该标签仅仅在 <NAME>值是Audit时出现。

比如<VERSION>1</VERSION>。


5. 审计限制

审计日志默认存放在data路径下,因为XML文件没有经过加密。官网建议通过參数指定到特殊路径下。设置对应人员权限,进行安全控制。
此外审计功能有例如以下情况不能进行记录:
1)仅仅有top-level(无变量定义)的语句才干进行审计,存储程序如存储过程。触发器。函数等不审计;
2)涉及到外部文件的语句无法进行审计。如load data infile。

Mysql5.6审计功能的更多相关文章

  1. percona mysql5.7关闭审计功能方法

    数据库的审计日志占用大量空间,当时是为了测试审计功能开启的,现在需要关闭 # /data/mysql_data]# du -sh * 124G audit.log # 查询审计相关参数 mysql&g ...

  2. MySQL5.7 (审计)通过init_connect + binlog 实现MySQL审计功能

    转载自:https://blog.51cto.com/13941177/2173620 一.简介 1.概述 mysql本身已经提供了详细的sql执行记录–general log ,但是开启它有以下几个 ...

  3. 解析大型.NET ERP系统 数据审计功能

    数据审计,英语表达是Audit,是追踪数据变化的过程,记录数据变化前后的值,供参考分析.通过设置,ERP可以追踪一个表的所有字段的变化,也可以只记录指定的字段的值变化.欧美企业每年都有独立的审计部门, ...

  4. 利用paramiko模块实现堡垒机+审计功能

    paramiko模块是一个远程连接服务器,全真模拟ssh2协议的python模块,借助paramiko源码包中的demos目录下:demo.py和interactive.py两个模块实现简单的堡垒机+ ...

  5. [转]ORACLE 审计功能

    审计是对选定的用户动作的监控和记录,通常用于: u          审查可疑的活动.例如:数据被非授权用户所删除,此时安全管理员可决定对该 数据库的所有连接进行审计,以及对数据库的所有表的成功地或不 ...

  6. SQLSERVER2008新增的审核/审计功能

    SQLSERVER2008新增的审核/审计功能 很多时候我们都需要对数据库或者数据库服务器实例进行审核/审计 例如对失败的登录次数进行审计,某个数据库上的DDL语句进行审计,某个数据库表里面的dele ...

  7. mysql基于init-connect+binlog完成审计功能

    目前社区版本的mysql的审计功能还是比较弱的,基于插件的审计目前存在于Mysql的企业版.Percona和MariaDB上,但是mysql社区版本有提供init-connect选项,基于此我们可以用 ...

  8. 转-利用Oracle审计功能来监测试环境的变化

    http://blog.csdn.net/luowangjun/article/details/5627102利用Oracle审计功能来监测试环境的变化 做过测试的人都应该会碰到这样的情况:测试发现的 ...

  9. sqlserver2012的审计功能的相关理解

    1.sqlserver2012可以做实例的审计,以及数据库的审计,基本包括了所有的操作.可以符合我们的要求.   2.审计功能需要实例级别的配置数据库级别的配置,实例上建立“审核”,数据库上建立“数据 ...

随机推荐

  1. 大数据学习——scala的wordCount小例子

    val lines=List("hello tom hello jerry","hello tom hello kitty hello china") //方法 ...

  2. mysql-学习链接

    http://www.cnblogs.com/lyhabc/p/3691555.html

  3. 关于EF调用存储过程那点事...

    最近研究了下EF怎么调用 数据库的分页存储过程,发现还是很不错的 1.数据库存储过程如下,一个简单的不含条件判断的 2.然后新建数据模型中选择存储过程: : 3.EF会自动生存一个返回复杂类型(Obj ...

  4. hihoCoder挑战赛29

    多打打不同的比赛,找经验啊 题目4 : 不上升序列 时间限制:40000ms 单点时限:2000ms 内存限制:256MB 描述 给定一个长度为 n 的非负整数序列 a[1..n]. 你每次可以花费 ...

  5. 【java基础 16】抽象类和接口的区别

    导读:前两天闲着没事儿,看了本书,然后写了点代码,在接口里面写了默认方法实现,因为书上说这个特性是从java8开始的,我还特地给测了一下java7. 没过几天,就有一个技术分享会,刚好也是讲java8 ...

  6. 骨牌覆盖问题总结!hihoCoder/ NYOJ-1273宣传墙1151

    本想着做一下第九届河南省省赛题,结果被这个类似骨牌覆盖的题卡住了,队友然我去hihoCoder上老老实实把骨牌覆盖一.二.三做完,这题就没什么问题了.虽然很不情愿,但还是去见识了一下.  骨牌覆盖问题 ...

  7. 九度oj 题目1416:猴子吃坚果

    题目描述: 动物园的猴子吃坚果的顺序都是按强壮程度来定的,最强壮的吃完才能轮到下一个,现在我们给出各个猴子的名字,强壮程度,吃饱的量,然后查询对应的猴子必须要扔多少坚果才可以轮到. 输入: 输入有多组 ...

  8. 【Luogu】P2351吊灯(脑洞后模拟)

    题目链接 这题要智商qwq.玩不来玩不来. 观察到(个P,能观察到的全都是dalao)x是解的充要条件是至少有n/x个节点的size是x的倍数. 证明请看这里 然后这题就变模拟了呀. #include ...

  9. 【Luogu】P1903数颜色(带修改莫队)

    题目链接 带修改莫队模板. 加一个变量记录现在是第几次修改,看看当前枚举的询问是第几次修改,改少了就改过去,改多了就改回来. 话说我栈用成队列了能过样例?!!!! 从此深信一句话:样例是出题人精心设计 ...

  10. Json操作(汇总)

    利用:com.fasterxml.jackson 原文地址:https://blog.csdn.net/joyous/article/details/9448461 说明:Map转化为Json:创建J ...