正文
mysql审计日志怎么发 mysql sql审计
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
MySQL审计工具Audit插件使用
一、介绍MySQL AUDIT
MySQL AUDIT Plugin是一个 MySQL安全审计插件,由McAfee提供,设计强调安全性和审计能力。该插件可用作独立审计解决方案,或配置为数据传送给外部监测工具。支持版本为MySQL (5.1, 5.5, 5.6, 5.7),MariaDB (5.5, 10.0, 10.1) ,Platform (32 or 64 bit)。从Mariadb 10.0版本开始audit插件直接内嵌了,名称为server_audit.so,可以直接加载使用。
二进制文件地址:
macfee的mysql audit插件虽然日志信息比较大,对性能影响大,但是如果想要开启审计,请斟酌。
二、安装使用MySQL AUDIT
# unzip audit-plugin-mysql-5.6-1.1.5-774-linux-x86_64.zip
MySQL的插件目录为:
mysql show global variables like 'plugin_dir';
+---------------+------------------------+
| Variable_name | Value |
+---------------+------------------------+
| plugin_dir | /app/mysql/lib/plugin/ |
+---------------+------------------------+
1 row in set (0.00 sec)
复制库文件到MySQL库目录下
# cp audit-plugin-mysql-5.6-1.1.2-694/lib/libaudit_plugin.so /app/mysql/lib/plugin/
# chmod a+x /app/mysql/lib/plugin/libaudit_plugin.so
加载Audit插件
mysql INSTALL PLUGIN AUDIT SONAME 'libaudit_plugin.so';
查看版本
mysql show global status like '%audit%';
+------------------------+-----------+
| Variable_name | Value |
+------------------------+-----------+
| Audit_protocol_version | 1.0 |
| Audit_version | 1.1.2-694 |
+------------------------+-----------+
2 rows in set (0.00 sec)
开启Audit功能
mysql SET GLOBAL audit_json_file=ON;
Query OK, 0 rows affected (0.00 sec)
执行任何语句(默认会记录任何语句),然后去mysql数据目录查看mysql-audit.json文件(默认为该文件)。
当然,我们还可以通过命令查看audit相关的命令。
mysql SHOW GLOBAL VARIABLES LIKE '%audit%';
其中我们需要关注的参数有:
1、audit_json_file
是否开启audit功能。
2、audit_json_log_file
记录文件的路径和名称信息。
3、audit_record_cmds
audit记录的命令,默认为记录所有命令。可以设置为任意dml、dcl、ddl的组合。如:audit_record_cmds=select,insert,delete,update。还可以在线设置set global audit_record_cmds=NULL。(表示记录所有命令)
4、 audit_record_objs
audit记录操作的对象,默认为记录所有对象,可以用SET GLOBAL audit_record_objs=NULL设置为默认。也可以指定为下面的格式:audit_record_objs=,test.*,mysql.*,information_schema.*。
5、audit_whitelist_users
用户白名单。
三、查看审计数据
插入一些数据,查看一下mysql-audit.json文件信息(json格式),如下:
$ cat /app/mysql/data/mysql-audit.json
{"msg-type":"activity","date":"1517989674556","thread-id":"3","query-id":"39","user":"root","priv_user":"root","ip":"","host":"localhost","connect_attrs":{"_os":"Linux","_client_name":"libmysql","_pid":"1331209","_client_version":"5.6.27","_platform":"x86_64","program_name":"mysql"},"pid":"3472328296227680304","os_user":"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","appname":"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","rows":"10","cmd":"select","objects":[{"db":"sbtest","name":"sbtest1","obj_type":"TABLE"}],"query":"select * from sbtest1 limit 10"}
审计记录文件一般存放在mysql的数据目录下。
Linux系统上记录MYSQL操作的审计日志
根据笔者上一篇文章—Linux系统上记录用户操作的审计日志 。本文来利用相同的方法记录MYSQL操作的审计日志。
使用用mysql工具连接MySQL server的所有操作会默认记录到~/.mysql_history文件中,这个文件会把所有操作记录下来,包括创建用户和修改用户的明文密码,这在生产系统上是不安全的。如果不想保存,仅仅删除是不行的(文件不存在会再建立),要直接将其软连接到垃圾箱。
ln -s /dev/null ~/.mysql_history
利用上一篇文章相同的方法记录MYSQL操作的审计日志,是因为mysql工具本身就是有一个shell, 每次mysql连接退出后,都会把此次操作的信息记录到~/.mysql_history文件中。那么可以重新定义MYSQL_HISTFILE环境变量来保存mysql日志。
先看置于/etc/profile.d目录下的环境变量的脚本mysql_history.sh,和loginlog类似。
在测试时,发现平时使用的普通用户在操作mysql后无法记录,而root用户(平时没有操作过mysql)可以记录成功。后来在在~/.mysql_history文件找到了操作记录,估计是这个文件还存在的原因,删除后才记录到新的MYSQL_HISTFILE定义的路径。
和loginlog一样,需要定期删除过期日志,以下脚本置于/etc/cron.weekly 目录下。
delete_time=15
find /opt/mysqllog/ -mtime +$delete_time -name '*.log' -exec rm -r {} \;
但是相比于loginlog,mysqllog有两点暂时没有解决。
1、定义最大的记录条数history.maxSize不知在哪定义,my.cnf?
2、每一条命令的时间记录添加。
如何实现MySQL数据库使用情况的审计
mysql的审计功能
mysql服务器自身没有提供审计功能,但是我们可以使用init-connect + binlog的方法进行mysql的操作审计。由于mysql binlog记录了所有对数据库长生实际修改的sql语句,及其执行时间,和connection_id但是却没有记录connection_id对应的详细用户信息。在后期审计进行行为追踪时,根据binlog记录的行为及对应的connection-id 结合 之前连接日志记录 进行分析,得出最后的结论。
1. 设置init-connect
1.1 创建用于存放连接日志的数据库和表
create database accesslog;
CREATE TABLE accesslog.accesslog (`id` int(11) primary key auto_increment, `time` timestamp, `localname` varchar(30), `matchname` varchar(30))
1.2 创建用户权限
可用现成的root用户用于信息的读取
grant select on accesslog.* to root;
如果存在具有to *.* 权限的用户需要进行限制。
这里还需要注意用户必须对accesslog表具有insert权限
grant select on accesslog.* to user@’%’;
1.3 设置init-connect
在[mysqld]下添加以下设置:
init-connect=’insertinto accesslog.accesslog(id, time, localname, matchname)
values(connection_id(),now(),user(),current_user());’
------注意user()和current_user()的区别
log-bin=xxx
这里必须开启binlog
1.4 重启数据库生效
shell /etc/init.d/mysql restart
2. 记录追踪
2.1 thread_id确认
可以用以下语句定位语句执行人
Tencent:~ # mysqlbinlog --start-datetime='2011-01-26 16:00:00'
--stop-datetime='2011-01-26 17:00:00' /var/lib/mysql/mysql-bin.000010
| grep -B 5 'wsj'
COMMIT/*!*/;
# at 767
#110126 16:16:43 server id 1 end_log_pos 872 Query thread_id=19 exec_time=0 error_code=0
use test/*!*/;
SET TIMESTAMP=1296029803/*!*/;
create table wsj(id int unsigned not null)
--
BEGIN
/*!*/;
# at 940
#110126 16:16:57 server id 1 end_log_pos 1033 Query thread_id=19 exec_time=0 error_code=0
SET TIMESTAMP=1296029817/*!*/;
insert into wsj(id) values (1)
--
BEGIN
/*!*/;
# at 1128
#110126 16:16:58 server id 1 end_log_pos 1221 Query thread_id=19 exec_time=0 error_code=0
SET TIMESTAMP=1296029818/*!*/;
insert into wsj(id) values (2)
2.2 用户确认
thread_id 确认以后,找到元凶就只是一条sql语句的问题了。
mysql select * from accesslog where id=19;
+----+---------------------+---------------------+-----------+
| id | time | localname | matchname |
+----+---------------------+---------------------+-----------+
| 19 | 2011-01-26 16:15:54 | test@10.163.164.216 | test@% |
+----+---------------------+---------------------+-----------+
1 row in set (0.00 sec)
3. Q
Q:使用init-connect会影响服务器性能吗?
A:理论上,只会在用户每次连接时往数据库里插入一条记录,不会对数据库产生很大影响。除非连接频率非常高(当然,这个时候需要注意的就是如何进行连接复用和控制,而非是不是要用这种方法的问题了)---如果采用长连接并且缓存的话,可以提高性能
Q:access-log表如何维护?
A: 由于是一个log系统,推荐使用archive存储引擎,有利于数据厄压缩存放。如果数据库连接数量很大的话,建议一定时间做一次数据导出,然后清表。
Q:表有其他用途么?
A:有!access-log表当然不只用于审计,当然也可以用于对于数据库连接的情况进行数据分析,例如每日连接数分布图等等,只有想不到没有做不到。---可以用来测试读写分离,验证负载均衡等
Q:会有遗漏的记录吗?
A:会的,init-connect 是不会在super用户登录时执行的。所以access-log里不会有数据库超级用户的记录,这也是为什么我们不主张多个超级用户,并且多人使用的原因。--这种审计不会记录root等具有super权限的账号对数据库的访问
审计工作日志的写法
审计机关及各部门坚持填写审计工作日志,是加强审计机关管理教育mysql审计日志怎么发的重要内容,也是促进廉政勤政,提高审计机关作风效能建设,营造审计机关良好mysql审计日志怎么发的工作秩序和环境的重要措施。
一、审计工作日志的概念
审计工作日志,是指记载审计机关各科室在工作日所开展的工作事项的一种应用文体,属于日记的范畴。但工作日志与通常的个人日记二者又有明显区别。一般讲,日记具有个人性质的特点,并对每天所遇到的事和所做的'事的记录,兼记对这些事情的感受,或直接抒发自己的感情。而审计工作日志,多指非个人的,是审计机关及所属部门对工作事项、工作完成情况和工作中遇到问题和解决方法的记录,同时也是对工作情况的总结,包括经验教训和收获等的记录。审计工作日志,也不同于《审计机关审计项目质量控制办法(试行)》(中华人民共和国审计署令第6号)中规定的“ 审计日记”,审计日记是审计人员以人为单位按时间顺序反映其每日实施审计全过程的书面记录。
二、写审计工作日志的好处
写审计工作日志,是审计机关进行管理教育的重要措施,是加强机关作风效能建设的有效手段。坚持写审计工作日志好处主要有三点:
一是可以培养认真、严谨、细致的工作作风 。细节决定成败,作风决定形象,形象重于泰山。只有坚持严谨细致的作风,勤勤恳恳、履职尽职,把工作中的点点滴滴都认真做到了、做好了,才能把你的本职工作真正完成好,才能树立和维护审计监督机关良好的社会形象。
二是可以增强审计工作的计划性 。每天做了哪些工作,还有什么需要注意的事项,思考一下明天的工作内容,做一些备忘录以应对所开展的工作,可以使审计工作计划更周密,工作开展起来会更加得心应手。
三是可以增强审计干部的逻辑思维能力 。把每天的工作情况转变成文字的过程,也是对已完成的工作进行梳理的过程,这就会使你的思路更清晰,不仅会增强成就感,而且会使你更加自信,更勤奋地面对新的一天。此外,写审计工作日志,还可以对所开展的审计活动起着检索工作的作用。
总之,坚持写审计工作日志是一个良好的工作习惯,贵在持之以恒,所以长期坚持写审计工作日志,对于深化审计工作有百益而无一害。
三、怎样写审计工作日志
写审计工作日志其实不难,不要视为畏途,最简单的方式,就是你把它当成一个工作日记,平铺直叙地写当天都做了哪些工作,并在结尾的时侯总结一下当天的经验教训或者收获等。
具体说来,审计工作日志的内容要素应包括以下四点:
1、当天的工作重点,即主要精力用于做了些什么;
2、值得记录的工作方法,即在当天的工作中学习和领悟到的工作方法;
3、工作中的失误及解决方式,不要怕问题暴露,这是为了避免犯同样的错误;
4、明天或今后一段的工作中需要注意的事项,如连续性的工作,今天完成到什么地步,明天继续实施时从哪里开始,其中有什么变化等。
四、写审计工作日志的要求
1、全面及时了解审计工作和审计活动的开展情况,持之以恒地将每天工作情况完整记录下来,最好不要代记、补记;
2、为便于书写工作日志,可设计制作内容简明、书写方便的工作日志表;
3、写审计工作日志字迹要清晰,内容要属实,不得弄虚作假;
4、审计工作日志要妥善保管,以便查询或作为工作考勤的重要依据。
关于mysql审计日志怎么发和mysql sql审计的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。