2019年3月11日 星期一

【MYSQL】下載安裝Mysql審計功能server_audit.so

審計功能,記錄可看出所有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/

沒有檔案就下載server_audit.so並移至/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/
下載方式2.存在自己的電腦後,再解壓,直接COPY-
server_audit.so 檔再移到系統內
(個人用這個方式,並直接保存server_audit.so檔案,以便之後有其他機器也要安裝)

增加server_audit.so執行權限


cd /usr/local/mysql/lib/plugin/
chmod +x server_audit.so
接下來進行設定及排程,進入Mysql安裝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>
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;


方法二:若伺服器已啟動,不便重開故可直接於Mysql下執行!
亦可至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






沒有留言:

張貼留言

【MYSQL】MYSQL的SYS表說明(版本8.0)

mysql> use sys Reading table information for completion of table and column names You can turn off this feature to get a quicker s...