審計功能,記錄可看出所有SQL的操作,對於被意外刪除TABLE或DROP.TRUNCATE,可查出誰是兇手,非常有用!
先查詢Mysql版本
[root@rosalie-mysql01 ~]# mysql -V
mysql Ver 14.14 Distrib 5.7.22, for linux-glibc2.12 (x86_64) using EditLine wrapper
進入Mysql執行,查詢確認路徑(外部程序安裝的位置)
確認plugin路徑
mysql> show variables like "%plugin%";
+-------------------------------+------------------------------+
| Variable_name | Value |
+-------------------------------+------------------------------+
| default_authentication_plugin | mysql_native_password |
| plugin_dir | /usr/local/mysql/lib/plugin/ |
+-------------------------------+------------------------------+
2 rows in set (0.00 sec)
查找一下路徑內有無server_audit.so的文件,通常第一次應該都查不到,之後下載後建議保留此檔,若有新機器就直接COPY此檔就可以了!
[root@rosalie-mysql01 mysql]# find / -name "server_audit.so"
/usr/local/mysql/lib/plugin/server_audit.so
有檔案,就忽略下載方式,將檔案移動到,Mysql系統查詢到的路徑下
mv "find查詢路徑(上面紅色查詢出的路徑)" /usr/local/mysql/lib/plugin/
https://downloads.mariadb.org/ 查詢適合的版本
下載方式1.LINUX下直接下載,
※檔案有點大,裡面東西很多,但其實只要server_audit.so小檔而已,因為找不到單獨的檔案!所以解壓之後把server_audit.so用CP或MV到路徑下,其他的東西就可以刪除了!
解壓縮
tar zxvf mariadb-10.2.19-linux-x86_64.tar.gz
因下載在我放在tmp下所以從tmp移到/usr/local/mysql/lib/plugin/
*檔案正常在mariadb-10.2.19-linux-x86_64/lib/plugin/server_audit.so
mv /tmp/mariadb-10.2.19-linux-x86_64/lib/plugin/server_audit.so /usr/local/mysql/lib/plugin/
*檔案正常在mariadb-10.2.19-linux-x86_64/lib/plugin/server_audit.so
mv /tmp/mariadb-10.2.19-linux-x86_64/lib/plugin/server_audit.so /usr/local/mysql/lib/plugin/
下載方式2.存在自己的電腦後,再解壓,直接COPY-
server_audit.so 檔再移到系統內
(個人用這個方式,並直接保存server_audit.so檔案,以便之後有其他機器也要安裝)
增加server_audit.so執行權限
cd /usr/local/mysql/lib/plugin/
chmod +x server_audit.so
chmod +x server_audit.so
mysql>INSTALL PLUGIN server_audit SONAME "server_audit.so";
查看配置內容
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 |
+-----------------------------------------+------------------------------------+
server_audit_events=指定記錄事件的類型,可以用逗號分隔的多個值(connect,query,table),如果開啟了查詢緩存(query cache),查詢直接從查詢緩存返回數據,將沒有table記錄
在文件裡 Logging events 一節提到的可設定的 Type,說明如下
- CONNECT :連接,斷開連接和連接失敗-包括錯誤代碼
- QUERY:執行的查詢及其結果以純文本形式顯示,包括由於語法或權限錯誤導致的查詢失敗
- TABLE:哪些表因此查詢而受影響
- QUERY_DDL:DDL 的查詢,是查詢的子集合 過濾DDL類型的查詢(CREATE、ALTER和DROP、RENAME以及TRUNCATE語句-除了CREATE/DROP [PROCEDURE / FUNCTION / USER]和RENAME USE
- QUERY_DML:DML 的查詢,是查詢的子集合 過濾DML類型的查詢(DO、CALL、LOAD DATA/XML、DELETE、INSERT、SELECT、UPDATE、HANDLER和REPLACE語句)
- QUERY_DML_NO_SELECT:與QUERY_DML同但不記錄SELECT查詢相同。(因為版本1.4.4)(DO、CALL、LOAD DATA/XML、DELETE、INSERT、UPDATE、HANDLER、REPLACE )
- QUERY_DCL:DCL 的查詢,是查詢的子集 過濾DCL型查詢(CREATE USER、DROP USER、RENAME USER、GRANT、REVOKE和SET PASSWORD語句)
*若要排除SELECT操作,需去除QUERY及QUERY_DML,兩個都不行存在,否則SELECT記錄仍會寫入
以下去除不要SELECT
SET GLOBAL server_audit_events = "CONNECT,TABLE,QUERY_DDL,QUERY_DML_NO_SELECT,QUERY_DCL";
server_audit_excl_users=該列表的用戶行為將不記錄,connect將不受該設置影響
server_audit_file_path=如server_audit_output_type為FILE,使用該變量設置存儲日誌的文件,可以指定目錄,默認存放在數據目錄的server_audit.log文件中
server_audit_file_rotate_now=強制日志文件輪轉,切新檔的意思
server_audit_file_rotate_size=限制日志文件的大小
server_audit_file_rotations=指定日誌文件的數量,如果為0日誌將從不輪轉
server_audit_incl_users=指定哪些用戶的活動將記錄,connect將不受此變量影響,該變量比server_audit_excl_users優先級高
server_audit_loc_info=指定的info字符串將添加到syslog記錄
server_audit_logging=啟動或關閉計功能
server_audit_mode=標識版本,用於開發測試
server_audit_output_type=指定日志輸出類型,可為SYSLOG或FILE
server_audit_query_log_limit=日志的大小
server_audit_syslog_facility=默認為LOG_USER,指定facility
server_audit_syslog_ident=設置ident,作為每個syslog記錄的一部分
server_audit_syslog_info=指定的info字符串將添加到syslog記錄
server_audit_syslog_priority=定義記錄日志的syslogd priority
方法一:進入Mysql執行:變更全局變量
方法二:若伺服器已啟動,不便重開故可直接於Mysql下執行!
亦可至my.cnf設置,但需重啟!
mysql>
set global server_audit_events="CONNECT,QUERY,TABLE,QUERY_DDL,QUERY_DML,QUERY_DCL";
set global server_audit_file_path='/data/audit_log/server_audit.log';
set global server_audit_file_rotate_size=1073741824;
set global server_audit_file_rotations=0;
set global server_audit_output_type=file;
亦可至my.cnf設置,但需重啟!
在my.cnf 增加
#audit
server_audit_events='CONNECT,QUERY,TABLE,QUERY_DDL,QUERY_DML,QUERY_DCL'
server_audit_logging=on
server_audit_file_path ='/data/audit_log/server_audit.log'
server_audit_file_rotate_size=1073741824
server_audit_file_rotations=0
server_audit_file_rotate_now=ON
方法一序接著建議先查看變量是否有更動
mysql>show variables like "server_audit%";
確定指定的變量都改變了之後,再將審計功能啟動
mysql>set global server_audit_logging=on;
可再次查看是否啟動成功 ,啟動成功就可以到指定資料夾查看使用者操作記錄!
查看檔案,即可看出操作記錄~
20190507 14:32:18,rosalie-mysql01,root,localhost,1587,35778,QUERY,,'SELECT concat(table_schema\'.\'table_name), concat(round(table_rows/1000000,2),\'M\') rows, concat(round(data_length/(1024*1024*1024),2),\'G\') DATA, concat(round(index_length/(1024*1024*1024),2),\'G\') idx, concat(round((data_length+index_length)/(1024*1024*1024),2),\'G\') total_size, round(index_length/data_length,2) idxfrac FROM information_schema.TABLES ORDER BY data_length+index_length DESC LIMIT 20',1064
20190507 14:33:18,rosalie-mysql01,root,localhost,1587,35779,QUERY,,'show databases',0
20190507 14:33:25,rosalie-mysql01,root,localhost,1587,35780,QUERY,,'SELECT DATABASE()',0
20190507 14:33:25,rosalie-mysql01,root,localhost,1587,35782,QUERY,tttt,'show databases',0
20190507 14:33:25,rosalie-mysql01,root,localhost,1587,35783,QUERY,tttt,'show tables',0
20190507 14:33:28,rosalie-mysql01,root,localhost,1587,35785,QUERY,tttt,'sohw tables',1064
20190311 11:31:29,rosalie-mysql01,root,localhost,42,659,QUERY,,'show processlist',0 20190311 11:31:35,rosalie-mysql01,root,localhost,42,660,QUERY,,'show databases',0 20190311 11:31:39,rosalie-mysql01,root,localhost,42,661,QUERY,,'SELECT DATABASE()',0
20190311 11:31:39,rosalie-mysql01,root,localhost,42,663,QUERY,testmaster,'show databases',0
20190311 11:31:39,rosalie-mysql01,root,localhost,42,664,QUERY,testmaster,'show tables',0 20190311 11:31:42,rosalie-mysql01,root,localhost,42,666,QUERY,testmaster,'select * from aaa',0
20190311 11:31:44,rosalie-mysql01,root,localhost,42,0,DISCONNECT,testmaster,,0 20190311 11:31:48,rosalie-mysql01,root,localhost,43,0,FAILED_CONNECT,,,1045
1064-表示語法錯誤
1046-TABLE不存在
詳細可參考https://www.itread01.com/content/1522586432.html
※其他語法:查看所有安裝套件的版本
(查詢對應的PLUGIN_NAME:SERVER_AUDIT)
mysql> select * from INFORMATION_SCHEMA.PLUGINS\G
*************************** 43. row ***************************
PLUGIN_NAME: SERVER_AUDIT
PLUGIN_VERSION: 1.4
PLUGIN_STATUS: ACTIVE
PLUGIN_TYPE: AUDIT
PLUGIN_TYPE_VERSION: 3.2
PLUGIN_LIBRARY: server_audit.so
PLUGIN_LIBRARY_VERSION: 1.4
PLUGIN_AUTHOR: Alexey Botchkov (MariaDB Corporation)
PLUGIN_DESCRIPTION: Audit the server activity
PLUGIN_LICENSE: GPL
LOAD_OPTION: ON
沒有留言:
張貼留言