数据库审计方案简介和功能对比
文章目录
- 数据库审计方案简介和功能对比
- 1. MySQL自带日志功能
- 1.1 普通日志
- 1.2 通过慢日志
- 2. 数据库插件形式
- 2.1 Oracle MySQL 企业版审计插件
- 2.2 Percona插件
- 2.3 MariaDB插件
- 3. 旁路机制
- 3.1 vc-mysql-sniffer
- 3.2 奇虎360开源产品mysql-sniffer
- 4. 功能对比
数据库审计方案简介和功能对比
通过数据库审计的功能,用户可以准实时的掌握当前服务器的运行状况,包括:热点表,热点数据,用户访问情况,请求方式,数据库响应时间,客户端来源IP等。阿里云在前段时间也上架了自己的SQL审计产品,供用户选择购买此项服务。实现数据库审计的方式也是多种多样,包括:MySQL普通/慢日志,数据库审计插件,网络捕获。本文将会对这些方式进行功能上的详细对比。
1. MySQL自带日志功能
MySQL可以通过开启普通日志,或者将慢日志开启的方式进行审计。
1.1 普通日志
开启普通日志来进行SQL审计的方式非常简单,这是MySQL所有分支都支持的功能,如下:
set global general_log=1;
general log可以选择保存在文件中,也可以选择保存在表中,可以通过如下参数进行设置:
log_output = 'file' //报存在文件中
log_output = 'table' //保存到表中
在文件中的输出格式为
2019-06-12T14:25:54.306179+08:00 4620 Query SELECT c FROM sbtest1 WHERE id=8866695
2019-06-12T14:25:54.306223+08:00 4622 Query SELECT c FROM sbtest1 WHERE id=9972289
2019-06-12T14:25:54.306274+08:00 4667 Query DELETE FROM sbtest1 WHERE id=10090252
2019-06-12T14:25:54.304255+08:00 4644 Query SELECT c FROM sbtest1 WHERE id=9977380
2019-06-12T14:25:54.305245+08:00 4638 Query SELECT c FROM sbtest1 WHERE id=10008275
2019-06-12T14:25:54.306325+08:00 4630 Query SELECT c FROM sbtest1 WHERE id=10044671
2019-06-12T14:25:54.305315+08:00 4616 Query SELECT SUM(K) FROM sbtest1 WHERE id BETWEEN 10031041 AND 10031140
2019-06-12T14:25:54.306345+08:00 4615 Query SELECT c FROM sbtest1 WHERE id BETWEEN 14539431 AND 14539530 ORDER BY c
2019-06-12T14:25:54.306360+08:00 4614 Query SELECT c FROM sbtest1 WHERE id=9953983
2019-06-12T14:25:54.306373+08:00 4646 Query SELECT c FROM sbtest1 WHERE id=10098988
在表中的输出格式为
mysql> select * from general_log limit 100,10;
+----------------------------+-------------------------------------+-----------+-----------+--------------+-----------------------------------------+
| event_time | user_host | thread_id | server_id | command_type | argument |
+----------------------------+-------------------------------------+-----------+-----------+--------------+-----------------------------------------+
| 2019-05-22 11:28:23.640542 | [sysbench] @ [100.110.0.8] | 127625 | 11013308 | Connect | sysbench@100.110.0.8 on d1 using TCP/IP |
| 2019-05-22 11:28:23.640549 | [sysbench] @ [100.110.0.8] | 127623 | 11013308 | Connect | sysbench@100.110.0.8 on d1 using TCP/IP |
| 2019-05-22 11:28:23.640573 | sysbench[sysbench] @ [100.110.0.8] | 127569 | 11013308 | Query | BEGIN |
| 2019-05-22 11:28:23.640585 | sysbench[sysbench] @ [100.110.0.8] | 127571 | 11013308 | Query | BEGIN |
| 2019-05-22 11:28:23.640565 | [sysbench] @ [100.110.0.8] | 127626 | 11013308 | Connect | sysbench@100.110.0.8 on d1 using TCP/IP |
| 2019-05-22 11:28:23.640574 | [sysbench] @ [100.110.0.8] | 127627 | 11013308 | Connect | sysbench@100.110.0.8 on d1 using TCP/IP |
| 2019-05-22 11:28:23.640589 | [sysbench] @ [100.110.0.8] | 127629 | 11013308 | Connect | sysbench@100.110.0.8 on d1 using TCP/IP |
| 2019-05-22 11:28:23.640598 | [sysbench] @ [100.110.0.8] | 127628 | 11013308 | Connect | sysbench@100.110.0.8 on d1 using TCP/IP |
| 2019-05-22 11:28:23.640639 | sysbench[sysbench] @ [100.110.0.8] | 127554 | 11013308 | Query | SELECT c FROM sbtest1 WHERE id=10801288 |
| 2019-05-22 11:28:23.640639 | sysbench[sysbench] @ [100.110.0.8] | 127560 | 11013308 | Query | SELECT c FROM sbtest1 WHERE id=9712647 |
+----------------------------+-------------------------------------+-----------+-----------+--------------+-----------------------------------------+
1.2 通过慢日志
慢日志本身的目的是为了记录存在性能问题的SQL,但是通过参数设置也可以用来进行审计的功能,如下:
set global min_examined_row_limit = 0;
set global log_queries_not_using_indexes=on;
set global long_query_time=0;
set global log_slow_admin_statements = 0;
set global slow_query_log = on;
输出日志格式为:
# Time: 2019-06-17T10:34:58.064103+08:00
# User@Host: root[root] @ localhost [] Id: 7
# Query_time: 0.000534 Lock_time: 0.000216 Rows_sent: 1 Rows_examined: 1
SET timestamp=1560738898;
select * from test_order_by_limit limit 1;
# Time: 2019-06-17T10:34:59.668562+08:00
# User@Host: root[root] @ localhost [] Id: 7
# Query_time: 0.000726 Lock_time: 0.000235 Rows_sent: 10 Rows_examined: 10
SET timestamp=1560738899;
select * from test_order_by_limit limit 10;
2. 数据库插件形式
通过MySQL插件,进行用户操作的审计,包括Oracle MySQL企业版,MariaDB/Percona分支中的审计插件。
2.1 Oracle MySQL 企业版审计插件
//安装
install plugin audit_log soname 'audit_log.so';
提供的参数(最新版本可能添加了更多的参数)
mysql> show global variables like '%audit%';
+-----------------------------+--------------+
| Variable_name | Value |
+-----------------------------+--------------+
| audit_log_buffer_size | 1048576 |
| audit_log_connection_policy | ALL |
| audit_log_current_session | OFF |
| audit_log_exclude_accounts | |
| audit_log_file | audit.log |
| audit_log_flush | OFF |
| audit_log_format | NEW |
| audit_log_include_accounts | |
| audit_log_policy | ALL |
| audit_log_rotate_on_size | 0 |
| audit_log_statement_policy | ALL |
| audit_log_strategy | ASYNCHRONOUS |
+-----------------------------+--------------+
12 rows in set (0.00 sec)
目前下载到的版本的记录的数据格式为xml形式,如下:
<AUDIT_RECORD><TIMESTAMP>2019-06-13T01:47:55 UTC</TIMESTAMP><RECORD_ID>138_2019-06-13T01:23:29</RECORD_ID><NAME>Query</NAME><CONNECTION_ID>1912</CONNECTION_ID><STATUS>0</STATUS><STATUS_CODE>0</STATUS_CODE><USER>sysbench[sysbench] @ [100.110.0.8]</USER><OS_LOGIN/><HOST/><IP>100.110.0.8</IP><COMMAND_CLASS>select</COMMAND_CLASS><SQLTEXT>SELECT c FROM sbtest1 WHERE id=11469792</SQLTEXT></AUDIT_RECORD>
2.2 Percona插件
Percona的MySQL分支中自带了审计插件,但是测试发现,其并不兼容Oracle MySQL,所以本文不在过多描述。
2.3 MariaDB插件
MariaDB的审计插件是完全兼容Oracle MySQL版本的。可以通过如下命令进行插件安装:
mysql> install plugin server_audit soname 'server_audit.so';
Query OK, 0 rows affected (0.00 sec)
通过全局变量控制是否开启审计日志
set global server_audit_logging = ON;
日志默认输出到datadir下,格式为
20190612 14:45:27,100-110-0-9,sysbench,100.110.0.8,4726,74697,QUERY,d1,'SELECT c FROM sbtest1 WHERE id BETWEEN 10094876 AND 10094975',0
20190612 14:45:27,100-110-0-9,sysbench,100.110.0.8,4751,74723,QUERY,d1,'SELECT c FROM sbtest1 WHERE id=10036027',0
20190612 14:45:27,100-110-0-9,sysbench,100.110.0.8,4768,74750,QUERY,d1,'SELECT c FROM sbtest1 WHERE id=10089548',0
20190612 14:45:27,100-110-0-9,sysbench,100.110.0.8,4718,74628,QUERY,d1,'SELECT DISTINCT c FROM sbtest1 WHERE id BETWEEN 9975155 AND 9975254 ORDER BY c',0
20190612 14:45:27,100-110-0-9,sysbench,100.110.0.8,4752,74680,QUERY,d1,'SELECT SUM(K) FROM sbtest1 WHERE id BETWEEN 10054577 AND 10054676',0
20190612 14:45:27,100-110-0-9,sysbench,100.110.0.8,4753,74728,QUERY,d1,'SELECT c FROM sbtest1 WHERE id=7355484',0
20190612 14:45:27,100-110-0-9,sysbench,100.110.0.8,4773,74755,QUERY,d1,'SELECT c FROM sbtest1 WHERE id=10081613',0
20190612 14:45:27,100-110-0-9,sysbench,100.110.0.8,4751,74757,QUERY,d1,'SELECT c FROM sbtest1 WHERE id=9982230',0
20190612 14:45:27,100-110-0-9,sysbench,100.110.0.8,4727,74734,QUERY,d1,'SELECT c FROM sbtest1 WHERE id=10077292',0
20190612 14:45:27,100-110-0-9,sysbench,100.110.0.8,4749,74691,QUERY,d1,'SELECT c FROM sbtest1 WHERE id=10059306',0
20190612 14:45:27,100-110-0-9,sysbench,100.110.0.8,4741,74711,QUERY,d1,'UPDATE sbtest1 SET k=k+1 WHERE id=10148860',0
3. 旁路机制
通过抓取网络请求,再根据MySQL协议解析出想要的数据。
3.1 vc-mysql-sniffer
这是一家位于美国华盛顿的数据库性能监控服务公司提供的产品,并不开源,但是二进制版本的程序可以在官网下载使用。
使用方式
./vc-mysql-sniffer -binding="[::]:13308" -show-database-changes="true" -output="/data/sniffer.log"
其功能是捕获MySQL的网络数据包,并解析成SQL语句,可以报存在文件中。
其输出的日志格式如下
# Time: 052319 10:32:53.354677
# User@Host: unknown_user[unknown_user] @ 100.110.0.8:63967 []
# Query_time: 0.000000
USE `unknown_database`
他们有配套的dashboard用来展示监控数据,但是官网没有提供下载。
3.2 奇虎360开源产品mysql-sniffer
MySQL Sniffer 是一个基于 MySQL 协议的抓包工具,实时抓取 MySQLServer 端或 Client 端请求,并格式化输出。输出内容包括访问时间、访问用户、来源 IP、访问 Database、命令耗时、返回数据行数、执行语句等。有批量抓取多个端口,后台运行,日志分割等多种使用方式,操作便捷,输出友好。
如下:
mysql-sniffer -i eth0 -p 3306
2017-02-23 14:47:45 testuser 10.xx.xx.xx NULL 0ms 1 select @@version_comment limit 1
2017-02-23 14:47:45 testuser 10.xx.xx.xx NULL 0ms 1 select USER()
2017-02-23 14:47:48 testuser 10.xx.xx.xx NULL 0ms 13 show databases
2017-02-23 14:47:51 testuser 10.xx.xx.xx NULL 0ms 1 SELECT DATABASE()
2017-02-23 14:47:51 testuser 10.xx.xx.xx mysql 0ms 0 use mysql
2017-02-23 14:47:53 testuser 10.xx.xx.xx mysql 0ms 29 show tables
2017-02-23 14:47:54 testuser 10.xx.xx.xx mysql 0ms 1 select 1
2017-02-23 14:48:01 testuser1 10.xx.xx.xx NULL 0ms 0 set autocommit=1
2017-02-23 14:48:01 testuser1 10.xx.xx.xx NULL 0ms 0 set autocommit=1
4. 功能对比
方式 | 数据格式 | 是否开源 | 是否记录SQL时间消耗 | 是否记录用户 | 是否记录来源IP | 是否记录数据库 | 是否记录错误 |
---|---|---|---|---|---|---|---|
general log | 文本 | 是 | 否 | 是 | 是 | 否 | 否 |
slow log | 文本 | 是 | 是 | 是 | 是 | 否 | 否 |
Oracle企业版审计插件 | xml/json | 否 | 否 | 是 | 是 | 否 | 是 |
MariaDB审计插件 | 文本字符串 | 是 | 否 | 是 | 是 | 是 | 是 |
vc-mysql-sniffer | 文本 | 否 | 是 | 是* | 是 | 是 | 否 |
奇虎360 mysql-sniffer | 文本 | 是 | 是 | 是* | 是 | 是 | 否 |
数据库审计方案简介和功能对比相关推荐
- 数据库审计系统基本原理与部署方式
数据库审计系统简介 什么是数据库审计? 数据库审计是记录数据库被访问行为的日志系统. 访问数据库的一般有两种行为,一种是应用服务区的访问,一种是数据库运维人员的访问. 数据库审计(简称DBAudit) ...
- 数据库审计产品应该怎么选?
随着数据价值的不断提升,从政策到用户对于数据安全重视程度越来越高,数据库审计产品作为一款部署简单,不用对现有IT架构进行任何改变,又能够满足政策合规需求的产品,是很多用户保障数据安全和合规需求的首选产 ...
- 开源日志审计系统_一文掌握mysql数据库审计特点、实现方案及审计插件部署教程...
概述 数据库审计(简称DBAudit)能够实时记录网络上的数据库活动,对数据库操作进行细粒度审计的合规性管理,对数据库遭受到的风险行为进行告警,对攻击行为进行阻断.它通过对用户访问数据库行为的记录.分 ...
- mysql 参照完整性规则_详解mysql数据库审计特点、实现方案及审计插件部署演示...
概述 数据库审计(简称DBAudit)能够实时记录网络上的数据库活动,对数据库操作进行细粒度审计的合规性管理,对数据库遭受到的风险行为进行告警,对攻击行为进行阻断.它通过对用户访问数据库行为的记录.分 ...
- 通过EF/Dapper扩展实现数据库审计功能
相信大家都有过周末被电话"吵醒"的经历,这个时候,客服同事会火急火燎地告诉你,客户反馈生产环境上某某数据"异常",然后你花费大量时间去排查这些错误数据,发现这是 ...
- mssql 数据库审计账户_SQLServer数据库审计功能入门之SQL Server审核 (SQL Server Audit)...
本文主要向大家介绍了SQLServer数据库审计功能入门之SQL Server审核,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助. 介绍 Audit是SQL Server ...
- Oracle数据库审计功能的使用
oracle审计功能 查看审计功能是否开启 开启审计功能: 关闭审计功能: 审计功能相关视图 审计功能的使用 数据库打开的语句审计功能 数据库打开的权限审计功能 数据库审计总体情况 数据库语句审计 数 ...
- 达梦数据库审计功能开启及审计记录查看
达梦数据库非安全版除了数据库管理员SYSDBA之外,还设有数据库审计员SYSAUDITOR,数据库审计员可以设置要审计的对象和操作.定义新的数据库审计员.查看和分析审计记录,通过设置审计,几乎可以跟踪 ...
- 数据库中间件1:数据库中间件的几种功能简介
数据库中间件的几种功能简介 数据库中间件是处于数据库与应用程序之间提供通用.复用服务的系统,减少应用结构的复杂性.如开源的mycat,是由java编写.提供了以下几种功能. 异构数据库的通用:通用的数 ...
最新文章
- 结构控制Switch Case
- c mysql批量插入优化_MySQL实现批量插入以优化性能的教程
- Vue 是如何用 Rollup 打包的?
- [Swift]LeetCode968.监控二叉树 | Binary Tree Cameras
- 不会 SQL 的程序员有多难?可能工作都找不到!
- 服务器linux换windows,【服务器运维】如何将linux体系更换成windows体系
- cad2022新功能介绍(autocad2022简体中文版)
- lin接口 连接计算机,db9接口(lin接口db9定义)
- 上行带宽和下行带宽是什么意思?各有什么作用?
- 《遥远的救世主》遵守客观规律(五)——文化属性
- AT32 EMAC MQTT Client
- Xilinx FPGA 将寄存器放入IOB中
- 千年瑶里:人间失落的天堂(一)
- 最新昆石VOS2009/VOS3000手机号段导入文件(手机归属地)
- SPSS—回归—多元线性回归(转)
- 终于有人把线性回归讲明白了
- 苹果mac系统怎么复制文件到移动硬盘?
- 匹兹堡大学计算机科学,匹兹堡大学计算机科学硕士排名第63(2020年TFE Times排名)...
- 给定两点确定一条直线
- 人来人走----超级表格创业大街历险记
热门文章
- C#读取shp多边形文件
- 算法转 Java 后端,2021秋招斩获腾讯、京东、百度等大厂 offer 面经分享!
- Python:士兵与枪(类的使用)
- git:remote: [session-f044bfa6] well: Incorrect username or password (access token)
- 计算机专业如何谋生自己谋生,如何谋生
- 简单又强大的联发科手机PhilZ Touch Recovery安装器,详细教程 - 本文出自高州吧
- 奋战7个月拿下offer【结果被裁,我哭了】
- 人工智能传奇—关于AI起源与发展的故事
- ThinkAdmin漏洞(CVE-2020-25540 )复现
- 亚马逊多账号防关联的解决方式