Windows下使用 Navicat + Filebeat + ELK 实现数据库审计

要实现数据库操作审计,之前我们的实现的方式是安装审计插件,但是安装审计插件对数据库性能损耗较大。今天介绍一种是对人为操作数据库进行审计的方法给大家参考,目标是对人为执行数据库操作进行审计,如果真有人恶意修改数据,至少我们能做到有迹可查。
实际环境: 用户 —— windows server 2008 —— 数据库服务器
用户登录windows 服务器上,使用navicate mysql客户端工具登录数据库,执行数据库更新脚本,或者查看数据。而我们要做的事情就是把用户的navicate mysql的历史操作日志导入elk中,这样就实现了。
步骤:
1.首先我们必须限定执行脚本的用户只用通过 windows 服务器上的navicate mysql客户端工具登录数据库。
2.在windows 下安装filebeat
下载安装包:
https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.0.2-windows-x86_64.zip
解压安装包,不需要安装,就可以用了
查看navicat历史日志路径:
日志目录下有两个日志文件
loghistory 就是记录了用户的操作
修改filebeat配置文件:
filebeat.prospectors:
- input_type: log
paths:
c:\users\ywadmin\documents\navicat\mysql\logs\loghistory.txt 操作日志路径
document_type: navicat-mysql-ywadmin
multiline:
pattern: '^\['
negate: true
match: after
c:\users\ywadmin\documents\navicat\premium\logs\loghistory.txt
document_type: navicat-pgsql-ywadmin
output.redis:
hosts: [172.31.5.2:6379]
data_type: list
key: navicat:log
启动filebeat
3.增加logstash 配置,并启动
[root@ywadmin etc]# cat logstash_navicatlog.conf
input {
redis {
host =>localhost
data_type =>list
key =>navicat:log
type =>redis-input
}
filter {
if [type] =~ navicat-mysql-.* {
grok {
match => { message => \[%{timestamp_iso8601:date}\] \[%{number:id}\] \[%{iporhost:host}.*\] \[%{word:db_type}\]\n%{greedydata:operate} }
date {
match => [ date, iso8601 ]
target =>@timestamp
remove_field =>date
ruby {
code =>event.timestamp.time.localtime
if [type] =~ navicat-pgsql-.* {
output {
elasticsearch{
hosts =>[localhost:9200]
index =>navicat-mysql-%{+yyyy-mm}
index =>navicat-pgsql-%{+yyyy-mm}
4.kibana 增加索引,效果如下