MySQL審計audit


導讀:
MySQL社區版是不帶審計功能的,如果要使用MySQL審計,可以考慮使用中間件(例如proxysql)或者是MariaDB的審計插件。這里以MariaDB的審計插件為例,實現MySQL 5.7的審計功能。
 
版本信息
操作系統版本               :CentOS 7.4
MySQL數據庫版本       :MySQL 5.7.27 社區版
MariaDB審計插件版本 :1.4.0
 
Note:
1.MariaDB審計插件一直在更新,不同版本的審計插件功能也不同,每個版本的功能見:https://mariadb.com/kb/en/mariadb-audit-plugin-options-and-system-variables/#server_audit_file_rotate_now
2.我們在給MySQL數據庫安裝審計插件時,需要從MariaDB里面拷貝審計插件。MariaDB版本與審計插件版本關系如下:https://mariadb.com/kb/en/mariadb-audit-plugin-versions/
3.MySQL版本與審計插件版本沒有特別的聯系,建議下載最新。
 
 
(一)下載安裝
直接下載MariaDB的二進制安裝包,下載鏈接如下:
下載完成之后,解壓安裝包。然后到plugin路徑下,該路徑是MariaDB存儲插件的地方:
mariadb-10.1.23-linux-x86_64/lib/plugin

在該路徑下存在 server_audit.so 文件,將其拷貝到MySQL服務器上。

 在MySQL數據庫上查看其插件存放路徑,如下:
mysql> show variables like 'plugin_dir';
+---------------+------------------------------+
| Variable_name | Value |
+---------------+------------------------------+
| plugin_dir | /usr/local/mysql/lib/plugin/ |
+---------------+------------------------------+

 將MariaDB的審計插件server_audit.so存放到該路徑下

[root@pro1 plugin]# ll
...
-rw-r--r--. 1 root root 176810 Jan 7 16:17 server_audit.so
...
 
# 修改插件權限
[root@pro1 plugin]# chown mysql:mysql server_audit.so
[root@pro1 plugin]# chmod 755 server_audit.so
[root@pro1 plugin]# ll
...
-rwxr-xr-x. 1 mysql mysql 176810 Jan 7 16:17 server_audit.so
...

 進入數據庫安裝插件

mysql> INSTALL PLUGIN server_audit SONAME 'server_audit.so';
Query OK, 0 rows affected (0.00 sec)

安裝之后,可以看到數據庫插件了

mysql> show plugins ;
+----------------------------+----------+--------------------+-----------------+---------+
| Name         | Status | Type  | Library         | License |
+----------------------------+----------+--------------------+-----------------+---------+
...
| SERVER_AUDIT | ACTIVE | AUDIT | server_audit.so | GPL |
+----------------------------+----------+--------------------+-----------------+---------+

 

(二)審計配置
審計配置即修改參數信息即可,需要注意的是最好將其放入MySQL的參數文件(my.cnf),如果僅在數據庫層面做修改,數據庫重啟后參數將失效。
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              |
+-------------------------------+-----------------------+

這里羅列了重點參數的含義:

 我的最終配置如下:

mysql> show variables like '%audit%';
+-------------------------------+-----------------------+
| Variable_name                 | Value                 |
+-------------------------------+-----------------------+
| server_audit_events           | CONNECT               |
| server_audit_excl_users       |                       |
| server_audit_file_path        | server_audit.log      |
| server_audit_file_rotate_now  | OFF                   |
| server_audit_file_rotate_size | 100000000             |
| server_audit_file_rotations   | 9                     |
| server_audit_incl_users       |                       |
| server_audit_loc_info         |                       |
| server_audit_logging          | ON                    |
| 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              |
+-------------------------------+-----------------------+

 

(三)審計日志解析
一行代表一條完成的審計日志,日志中的字段用逗號分隔。各種事件將產生不同的審計記錄,這些記錄的格式個各不相同。根據審計事件,主要分為3類:
(3.1)連接審計
主要審計連接數據庫、斷開連接、連接失敗等操作,其日志格式如下:
[timestamp],[serverhost],[username],[host],[connectionid],0,CONNECT,[database],,0
[timestamp],[serverhost],[username],[host],[connectionid],0,DISCONNECT,,,0
[timestamp],[serverhost],[username],[host],[connectionid],0,FAILED_CONNECT,,,[retcode]

 (3.2)查詢審計

即審計select語句,其日志格式如下:
[timestamp],[serverhost],[username],[host],[connectionid],[queryid],QUERY,[database],[object], [retcode]

 (3.3)表相關審計

如果審計開啟TABLE事件,則會審計創建、刪除、重命名表等操作,日志格式如下:
[timestamp],[serverhost],[username],[host],[connectionid],[queryid],CREATE,[database],[object],
[timestamp],[serverhost],[username],[host],[connectionid],[queryid],READ,[database],[object],
[timestamp],[serverhost],[username],[host],[connectionid],[queryid],WRITE,[database],[object],
[timestamp],[serverhost],[username],[host],[connectionid],[queryid],ALTER,[database],[object],
[timestamp],[serverhost],[username],[host],[connectionid],[queryid],RENAME,[database], [object_old]|[database_new].[object_new],
[timestamp],[serverhost],[username],[host],[connectionid],[queryid],DROP,[database],[object],

 

 【完】


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM