對於MySQL、Percona、MariaDB三家都有自己的審計插件,但是MySQL的審計插件是只有企業版才有的,同時也有很多第三方的的MySQL的審計插件,而Percona和MariaDB都是GPL的審計插件。MariaDB的審計插件,默認是沒有安裝的的,安裝該插件並開啟審計功能后,可以將對數據庫的各種操作記錄保存下來,以便追蹤操作來源及具體操作。
MariaDB版本:
Server version: 10.4.19-MariaDB (該版本自帶了server_audit插件)
一、MariaDB審計日志寫到文件
1、安裝server_audit插件
查看插件存放的目錄,登陸進MariaDB,執行:
MariaDB [(none)]> show variables like '%plugin%';
ls /usr/lib64/mysql/plugin/
查看有沒有一個叫做server_audit.so的文件,如果沒有的話,到http://www.skysql.com/downloads/mariadb-audit-plugin-beta去下載放到目錄下即可。
2、安裝插件
MariaDB [(none)]> INSTALL PLUGIN server_audit SONAME 'server_audit.so';
或者編輯數據庫的配置文件my.cnf,添加如下內容:
[mysqld]
plugin-load=server_audit.so
安裝后,可登陸客戶端查看audit相關的全局變量:
MariaDB [(none)]> show global variables like '%audit%';
3、打開日志的審計功能
從上圖可以看到,現在插件已將安裝上了,但是還沒有開啟,可通過以下命令進行開啟:
MariaDB [(none)]> set global server_audit_logging=1;
通過命令開啟該功能后,一旦數據庫服務重啟后便會失效,可以通過在配置文件添加避免這個問題:
[mysqld]
server_audit_logging=on
開啟后,查看audit插件的運行狀態:
MariaDB [(none)]> show global status like '%audit%';
各參數含義如下:
server_audit_active :ON (表示server_audit插件在運行);
server_audit_current_log : server_audit.log(審計日志路徑和日志名);
server_audit_last_error : 錯誤消息;
server_audit_writes_failed : 因錯誤沒有記錄的日志條目數;
可對audit相關的變量通過命令行進行設置,也可以直接在配置文件my.cnf中進行配置,常用變量設置如下:
set GLOBAL server_audit_file_path='/data/logs/mariadb/server_audit.log'; --日志保存路徑
set GLOBAL server_audit_events='connect,query,table'; --日志記錄的操作
set GLOBAL server_audit_events='query_ddl,query_dml'; --不記錄select查詢操作,只記錄增刪改、DDL操作
set GLOBAL server_audit_incl_users ='test,user,root'; --審計的用戶對象,不設置則針對所有用戶
set GLOBAL server_audit_file_rotate_size=1073741824; --單個日志大小(單位:字節),文件到達該大小后,會自動切換
set GLOBAL server_audit_file_rotations=9; --日志保存數量
為了防止server_audit插件被卸載,可以在在配置文件my.cnf中添加如下選項:
[mysqld]
server_audit=FORCE_PLUS_PERMANENT
然后重啟數據庫后生效。
4、卸載插件
在MySQL客戶端中執行如下命令:
MariaDB [(none)]> UNINSTALL PLUGIN server_audit;
驗證卸載是否完成:
MariaDB [(none)]> show variables like '%audit%';
Empty set (0.00 sec)
卸載的步驟:
1、如果在數據庫的配置文件中配置了server_audit相關的選項,需要先在配置文件里把這項配置項注釋掉,再重啟mariadb。
2、然后在客戶端執行UNINSTALL PLUGIN server_audit;才能卸載掉這個插件。
3、卸載插件完成后,執行show variables like '%audit%';仍然能看到這個插件的可用參數,再次重啟mariadb才行。
二、MariaDB審計日志寫到syslog
將MariaDB審計日志寫到syslog的方法,與寫入到日志文件中的方法基本相同,就是多了一條顯式的指定日志的存儲方式而已。
改變審計日志輸入類型,即更改參數server_audit_output_type的值,命令如下:
MariaDB [(none)]> SET GLOBAL server_audit_output_type=SYSLOG;
需要重啟rsyslog服務后生效,命令如下:
# /etc/init.d/rsyslog restart
通過MySQL客戶端連接到數據庫后,執行一些數據庫、表的操作,可以在syslog里看到操作的記錄:
# tailf /var/log/messages
默認的審計日志都是記錄在/var/log/message文件里,不方便我們查看,可以修改下系統日志的配置文件:
# vim /etc/rsyslog.conf
在*.info;mail.none;authpriv.none;cron.none;local4.none /var/log/messages的下面加一行:
if $programname =='mysql-server_auditing' then /data/logs/mariadb/mariadb_audit_log
然后在重啟rsyslog服務:
# /etc/init.d/rsyslog restart
這樣的話,就能將審計的日志輸出到獨立的文件/data/logs/mariadb/mariadb_audit_log里面。
(注意:審計日志在/var/log/messages寫一遍,在/data/logs/mariadb/mariadb_audit_log再寫一遍,不是單單只寫到/var/log/mariadb_audit_log里面的)
通過MySQL客戶端連接到數據庫后,執行一些數據庫、表的操作,可以在指定的日志文件里看到操作的記錄:
# tailf /data/logs/mariadb/mariadb_audit_log
補充:MariaDB Audit Plugin和init-connect+binlog比較
(1)、init-connect+binlog方案要求用戶對日志表至少有insert權限,每添加一個新用戶都要進行授權,顯得比較麻煩;而MariaDB Audit Plugin默認會對所有用戶進行行為審計,不需要對新添加的用戶進行授權,MariaDB Audit Plugin還可以指定對哪些用戶進行行為審計,哪些用戶不需要進行行為審計;
(2)、init-connect+binlog方案無法對具有super權限的用戶進行行為審計,而MariaDB Audit Plugin可以對所有用戶進行行為審計,包括具有super權限的用戶;
(3)、init-connect+binlog方案需要修改配置文件之后重啟MySQL生效,而MariaDB Audit Plugin可以在線進行配置,無需重啟服務生效;
(4)、init-connect+binlog方案審計信息輸出到binlog中,MariaDB Audit Plugin可以選擇將審計信息輸出到syslog或者自定義的路徑。
來源:https://www.jianshu.com/p/57368ff55072