MySQL審計audit
阿新 • • 發佈:2021-01-10
導讀: 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的二進位制安裝包,下載連結如下: https://downloads.mariadb.com/MariaDB/mariadb-10.1.23/bintar-linux-x86_64/mariadb-10.1.23-linux-x86_64.tar.gz 下載完成之後,解壓安裝包。然後到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],
【完】