轉(zhuǎn)自??https://mp.weixin.qq.com/s/vNcTb7IR_LpYlcZf_Y-aAA
Oracle 的 MySQL 社區(qū)版不帶審計(jì)插件(Audit Plugin),要想使用審計(jì)功能,你可以用企業(yè)版芬迄,不過(guò)這需要銀子。業(yè)界還有一些 GPL 協(xié)議的審計(jì)插件答捕,這里我們選擇 MariaDB 的審計(jì)插件时甚。
一、遷移并安裝
MariaDB 的 10.1 版本對(duì)應(yīng)與 Oracle 的 MySQL 5.7乞而,我們到它的官網(wǎng)上下載 Linux 的通用版本送悔,下載下來(lái)解壓大約 1.3G:
#ll-hmariadb-10.1.46-linux-x86_64.tar-rw-rw-r--1scutechscutech1.3GAug19 18:19mariadb-10.1.46-linux-x86_64.tar
我們找到需要的審計(jì)插件:
./mariadb-10.1.46-linux-x86_64/lib/plugin/server_audit.so
把這個(gè) so 結(jié)尾的文件拷貝到 MySQL 的插件目錄,例如:/usr/lib/mysql/plugin/ 爪模,使用下面的命令加載:
mysql>? install plugin server_audit SONAME'server_audit.so';
mysql> show plugins;
......
| SERVER_AUDIT? ? ? ? ? ? ? |ACTIVE| AUDIT? ? ? ? ? ? ? |server_audit.so| GPL? ? |
+----------------------------+----------+--------------------+----------------------+---------+
通過(guò) SHOW PLUGINS 可以看到 SERVER_AUDIT 是最后一個(gè) plugin欠啤。
二、配置
MariaDB 的審計(jì)插件的配置說(shuō)明參見(jiàn):https://mariadb.com/kb/en/mariadb-audit-plugin-configuration/
涉及到審計(jì)功能的參數(shù)如下:
mysql> show variables like'%audit%';
+-------------------------------+-----------------------+
| Variable_name? ? ? ? ? ? ? ? |Value|
+-------------------------------+-----------------------+
|server_audit_events? ? ? ?|? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
| server_audit_excl_users|? ? ? ? ? ? ? ? ? ? ? ? ? ? |
|server_audit_file_path? ? | server_audit.log? |
| server_audit_file_rotate_now? |OFF|
|server_audit_file_rotate_size| 1000000? ? ? ? |
| server_audit_file_rotations? |9? ? ? ? ? ? ? ? ? ? ? |
|server_audit_incl_users? ? ? |? ? ? ? ? ? ? ? ? ? ? |
| server_audit_loc_info? ? ? ? |? ? ? ? ? ? ? ? ? ? ? ?|
|server_audit_logging? ? ? ? ?| OFF? ? ? ? ? ? ? ? ? |
| server_audit_mode? ? ? ? ? ? |1? ? ? ? ? ? ? ? ? ? ? ? ?|
|server_audit_output_type| file? ? ? ? ? ? ? ? ? ? ? ?|
| server_audit_query_log_limit? |1024? ? ? ? ? ? ? |
|server_audit_syslog_facility| LOG_USER? ? ? ? ? ? ? |
| server_audit_syslog_ident? ? |mysql-server_auditing|
|server_audit_syslog_info|? ? ? ? ? ? ? ? ? ? ? |
| server_audit_syslog_priority? |LOG_INFO|
+-------------------------------+-----------------------+
16 rowsinset (0.00 sec)
這些參數(shù)值可以用 SET 語(yǔ)句進(jìn)行設(shè)置:
SETGLOBALserver_audit_logging=ON;SETglobalserver_audit_events='connect,query';
為了重新啟動(dòng)后也能生效屋灌,可以在 MySQL 的配置文件添加相應(yīng)的設(shè)置:
[server]... server_audit_logging=ONserver_audit_events=connect,query…
server_audit_logging 這參數(shù)默認(rèn)為 OFF洁段,把這個(gè)參數(shù)設(shè)置為 ON 才能啟動(dòng)審計(jì)功能。
server_audit_events 決定記錄的事件共郭,這里我們記錄 connect 和 query祠丝,也就是記錄用戶的連接和查詢語(yǔ)句。
三除嘹、審計(jì)記錄的文件和格式
使用下面的命令可以強(qiáng)制進(jìn)行審計(jì)文件的切換:
mysql>setglobalserver_audit_file_rotate_now =on;Query OK,0rowsaffected(0.00sec)
生成一個(gè)新的審計(jì)文件写半,文件名后面數(shù)字表示文件的序號(hào):
root@infokist:/var/lib/mysql# ll server_au*-rw-r-----1mysql mysql26163Aug2011:11server_audit.log-rw-r-----1mysql mysql326651Aug2011:09 server_audit.log.1
server_audit_file_rotate_size:決定每個(gè)審計(jì)記錄文件的大小,到這個(gè)閥值時(shí)自動(dòng)進(jìn)行審計(jì)記錄文件的切換尉咕。
server_audit_file_rotations:決定審計(jì)記錄文件的數(shù)量叠蝇,到這個(gè)閥值時(shí)會(huì)覆蓋第一個(gè)審計(jì)記錄文件,默認(rèn)為 9年缎。
server_audit_output_type:設(shè)置為 file 時(shí)悔捶,記錄成文件,默認(rèn)目錄是 MySQL 的 datadir 目錄单芜, 默認(rèn)文件名是 server_audit.log蜕该。當(dāng)設(shè)置為 syslog 時(shí),審計(jì)記錄會(huì)通過(guò)標(biāo)準(zhǔn) <syslog.h> API 發(fā)送給本地的 syslogd daemon缓溅。
審計(jì)記錄文件的格式是:
[timestamp],[serverhost],[username],[host],[connectionid],[queryid],[operation],[database],[object],[retcode]
一個(gè)對(duì)應(yīng)的例子如下:
20200820 11:04:04,infokist,superuser,localhost,23,4759,QUERY,ds_db,'selectcount(*)fromvm_zfs_storage',0