MySQL審計插件MariaDB Audit Plugin學習總結

MySQL的社區版沒有審計功能,企業版纔有審計功能。企業版中自帶 Audit Plugin ,名爲audit_log.so。可是其它MySQL分支版本也開發了各自的審計功能插件。最多見的就是Percona Audit Log Plugin、MariaDB Audit Plugin、固然還有通用插件McAfee MySQL Audit Plugin。 若是MySQL社區版想上審計功能的話,可否使用這三個插件呢?答案是社區版MySQL可使用MariaDB Audit Plugin和McAfee MySQL Audit Plugin,Percona Audit Log Plugin是僅供Percona Server使用的免費插件,下面咱們來學習、總結一下,在MySQL社區版中如何使用MariaDB Audit Plugin插件來作數據庫的跟蹤、審計。mysql

 

插件介紹linux

 

下面是官方網址關於MariaDB Audit Plugin的介紹,更多資料請參考https://mariadb.com/kb/en/mariadb-audit-plugin/sql

MariaDB and MySQL are used in a broad range of environments, but if you needed to record user access to be in compliance with auditing regulations for your organization, you would previously have had to use other database solutions. To meet this need, though, MariaDB has developed the MariaDB Audit Plugin. Although the MariaDB Audit Plugin has some unique features available only for MariaDB, it can be used also with MySQL.數據庫

Basically, the purpose of the MariaDB Audit Plugin is to log the server's activity. For each client session, it records who connected to the server (i.e., user name and host), what queries were executed, and which tables were accessed and server variables that were changed. This information is stored in a rotating log file or it may be sent to the local syslogd.緩存

The MariaDB Audit Plugin works with MariaDB, MySQL (as of, version 5.5.34 and 10.0.7) and Percona Server. MariaDB started including by default the Audit Plugin from versions 10.0.10 and 5.5.37, and it can be installed in any version from MariaDB 5.5.20.服務器

 

 

插件下載session

  目前而言,官方並無提供單獨MariaDB Audit Plugin下載地址,因此你必須下載MariaDB的安裝包,而後從安裝包中找到插件的文件。app

 

官方下載地址:ide

 

    https://downloads.mariadb.org/mariadb/+releases/學習

 

這裏咱們下載mariadb-5.5.64-linux-systemd-x86_64.tar.gz測試驗證一下。插件server_audit.so通常位於目錄./lib/plugin下面。

 

 

 

插件安裝

 

 

MySQL的插件必須放在plugin_dir目錄下面,因此首先查看當前社區版本MySQL的系統變量plugin_dir(插件路徑)

 

mysql> select version() from dual;
+------------+
| version()  |
+------------+
| 5.7.21-log |
+------------+
1 row in set (0.00 sec)
 
mysql> show variables like 'plugin_dir';
+---------------+--------------------------+
| Variable_name | Value                    |
+---------------+--------------------------+
| plugin_dir    | /usr/lib64/mysql/plugin/ |
+---------------+--------------------------+
1 row in set (0.01 sec)
 
mysql> 

 

將server_audit.so文件拷貝到系統變量plugin_dir對應的目錄下面。

 

# cd /tmp
# tar -xzvf mariadb-5.5.64-linux-systemd-x86_64.tar.gz 
# cd mariadb-5.5.64-linux-systemd-x86_64
# find ./ -name "server_audit.so"
./lib/plugin/server_audit.so
 
# cp /tmp/mariadb-5.5.64-linux-systemd-x86_64/lib/plugin/server_audit.so /usr/lib64/mysql/plugin/
# chmod +x server_audit.so 

 

 

在安裝MySQL插件MariaDB Audit Plugin前,先確認系統glibc版本是否匹配編譯server_audit.so的glibc版本。MariaDB通常多使用2.14版glibc進行編譯。若是沒有2.14版本的glibc,頗有可能出現下面錯誤,以下所示: 

 

# strings /lib64/libc.so.6 |grep GLIBC_
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_PRIVATE
 
mysql> INSTALL PLUGIN server_audit SONAME 'server_audit.so';
ERROR 1126 (HY000): Can't open shared library '/usr/lib64/mysql/plugin/server_audit.so' (errno: 2 /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /usr/lib64/mysql/plugin/server_audit.so))
mysql>

 

 

安裝glibc2.14,簡單步驟以下,安裝glibc2.14可能會遇到一些問題,此篇不作展開講述。

 

# wget -c http://ftp.gnu.org/gnu/libc/glibc-2.14.tar.gz
# tar -zxvf glibc-2.14.tar.gz 
# cd glibc-2.14
# mkdir build
# cd build
# ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
#make && make install

 

安裝完成後,驗證是否安裝成功。

 

# ll /lib64/libc.so.6
lrwxrwxrwx 1 root root 12 May 23 18:28 /lib64/libc.so.6 -> libc-2.14.so
# strings /lib64/libc.so.6 |grep GLIBC_
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_PRIVATE

 

 

注意,安裝完2.14版本的glibc後,必須重啓MySQL,不然在安裝補丁過程當中,依然報上面錯誤

 

mysql> INSTALL PLUGIN server_audit SONAME 'server_audit.so';
ERROR 1126 (HY000): Can't open shared library '/usr/lib64/mysql/plugin/server_audit.so' (errno: 2 /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /usr/lib64/mysql/plugin/server_audit.so))

 

 

重啓MySQL實例後,安裝成功。以下所示:

 

mysql> INSTALL PLUGIN server_audit SONAME 'server_audit.so';
Query OK, 0 rows affected (0.02 sec)
mysql> SELECT PLUGIN_NAME, PLUGIN_LIBRARY, PLUGIN_STATUS, LOAD_OPTION 
    -> FROM INFORMATION_SCHEMA.PLUGINS 
    -> WHERE PLUGIN_LIBRARY = 'server_audit.so';
+--------------+-----------------+---------------+-------------+
| PLUGIN_NAME  | PLUGIN_LIBRARY  | PLUGIN_STATUS | LOAD_OPTION |
+--------------+-----------------+---------------+-------------+
| SERVER_AUDIT | server_audit.so | ACTIVE        | ON          |
+--------------+-----------------+---------------+-------------+
1 row in set (0.00 sec)

 

關於插件MariaDB Audit Plugin 目前的版本信息,以下所示

 

Version

Introduced

1.4.7

MariaDB 10.1.41, MariaDB 10.2.26, MariaDB 10.3.17, MariaDB 10.4.7

1.4.5

MariaDB 10.2.24, MariaDB 10.3.15, MariaDB 10.4.5

1.4.4

MariaDB 5.5.61, MariaDB 10.0.36, MariaDB 10.1.34, MariaDB 10.2.15, MariaDB 10.3.7, MariaDB 10.4.0

1.4.0

MariaDB 5.5.48, MariaDB 10.0.24, MariaDB 10.1.11

1.3.0

MariaDB 5.5.43, MariaDB 10.0.18, MariaDB 10.1.5

1.2.0

MariaDB 5.5.42, MariaDB 10.0.17, MariaDB 10.1.4

1.1.7

MariaDB 5.5.38, MariaDB 10.0.11, MariaDB 10.1.0

1.1.6

MariaDB 5.5.37, MariaDB 10.0.10

1.1.5

MariaDB 10.0.09

1.1.4

MariaDB 5.5.36

1.1.3

MariaDB 5.5.34, MariaDB 10.0.7

 

咱們這裏從mariadb-5.5.64拷貝的插件文件,因此MariaDB Audit Plugin的版本爲 1.4.4。 具體參考官方文檔https://mariadb.com/kb/en/mariadb-audit-plugin-versions/

 

 

參數說明

 

以下所示能夠查看MariaDB Audit Plugin的相關參數。用命令設置或在參數文件my.cnf中配置。

mysql> show variables like '%server_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 rows in set (0.00 sec)
 
 
mysql> SET GLOBAL server_audit_logging=ON;
Query OK, 0 rows affected (0.00 sec)

關於這些參數的具體定義,以下所示:

 

 

server_audit_events         

指定記錄到日誌的event類型,Type以下,具體請見下面截圖(來自官方文檔)。能夠用逗號分隔的多個值(connect,query,table),若是開啓了查詢緩存(query cache),查詢直接從查詢緩存返回數據,將沒有table記錄

 

clip_image001

 

參數server_audit_events的有效值跟插件版本有關。

 

·         CONNECT, QUERY, TABLE (MariaDB Audit Plugin < 1.2.0)

·         CONNECT, QUERY, TABLE, QUERY_DDL, QUERY_DML (MariaDB Audit Plugin >= 1.2.0)

·         CONNECT, QUERY, TABLE, QUERY_DDL, QUERY_DML, QUERY_DCL (MariaDB Audit Plugin >=1.3.0)

·         CONNECT, QUERY, TABLE, QUERY_DDL, QUERY_DML, QUERY_DCL, QUERY_DML_NO_SELECT (MariaDB Audit Plugin >= 1.4.4)

 

server_audit_excl_users

該列表的用戶行爲將不記錄,connect將不受該設置影響     

server_audit_file_path      

審計日誌路徑,若是server_audit_output_type爲FILE,審計日誌默認存於數據目錄下。即參數datadir對應的數據目錄下面。若是修改server_audit_file_path,以前舊的審計日誌文件不會被刪除。須要手工去清理、刪除

另外MySQL會開始新的審計日誌輪轉。

server_audit_file_rotate_now

強制輪轉一次,執行腳本SET GLOBAL server_audit_file_rotate_now = ON;後,審計日誌就會強制輪轉一次。

server_audit_file_rotate_size

限制單個輪轉審計日誌大小,超出該限值後自動輪轉。默認值爲1000000,單位爲byte,建議設置稍微大一點,例如,64M大小,67108864。具體根據實際需求和參數server_audit_file_rotations一塊兒設定。

 

注意事項:若是你參數server_audit_file_rotations設定爲1000000, 你會發現審計日誌的實際大小跟這個參數有點出入。這個是正常的。由於無法精準控制,可能寫入最後一條記錄後,發現日誌文件大小應該超過了1000000,進程馬上強制輪轉。可是此時文件大小已經超過1000000了。

 

# ls -lrt server*
-rw-r----- 1 mysql mysql 1000048 May 25 05:25 server_audit.log.9
-rw-r----- 1 mysql mysql 1000451 May 25 09:02 server_audit.log.8
-rw-r----- 1 mysql mysql 1000602 May 25 09:35 server_audit.log.7
-rw-r----- 1 mysql mysql 1000816 May 25 09:42 server_audit.log.6
-rw-r----- 1 mysql mysql 1000616 May 25 09:50 server_audit.log.5
-rw-r----- 1 mysql mysql 1000721 May 25 09:55 server_audit.log.4
-rw-r----- 1 mysql mysql 1001032 May 25 10:02 server_audit.log.3
-rw-r----- 1 mysql mysql 1000867 May 25 10:06 server_audit.log.2
-rw-r----- 1 mysql mysql 1001079 May 25 10:12 server_audit.log.1
-rw-r----- 1 mysql mysql  570568 May 25 10:30 server_audit.log

 

官方文檔關於參數的詳細介紹位於https://mariadb.com/kb/en/mariadb-audit-plugin-options-and-system-variables/,這裏簡單總結一下這些參數。

 

server_audit_file_rotations 

輪轉日誌總數,當設爲0表示審計日誌不輪轉。默認值爲9。 通常須要根據實際需求進行修改。

server_audit_incl_users    

指定哪些用戶的活動將記錄到審計日誌,connect將不受此變量影響,該變量比server_audit_excl_users 優先級高

server_audit_loc_info   

這個是插件內部使用的參數,對用戶沒有什麼意義。

·           在早期版本中,用戶將其視爲只讀變量

·           在更高版本中,它對用戶不可見。   

server_audit_logging       

審計功能的開關, ON表示開啓審計功能,OFF表示關閉審計功能。

server_audit_mode    

標識版本,用於開發測試。對於用戶而言,此變量沒有任何特殊含義。 它的值主要反映了啓動插件所使用的服務器版本,供開發人員用於測試      

server_audit_output_type    

指定審計日誌的類型,有SYSLOG 或FILE兩種選擇,默認爲FILE

server_audit_query_log_limit

  記錄中查詢字符串的長度限制。默認爲1024

server_audit_syslog_facility

  當審計日誌類型爲syslog模式時,它定義了將發送到系統日誌的記錄的功能。 之後可使用此參數過濾日誌。

server_audit_syslog_ident  

設置ident,做爲每一個syslog記錄的一部分 

server_audit_syslog_info    

指定的info字符串將添加到syslog記錄

server_audit_syslog_priority

定義記錄日誌的syslogd priority

 

 

 

默認狀況下,日誌記錄設置爲OFF。 要啓用它,請將server_audit_logging變量設置爲ON。請注意,若是啓用了查詢緩存,而且從查詢緩存返回了查詢,則因爲服務器未打開或訪問任何表而是依賴於緩存的結果,所以沒有TABLE記錄將出如今日誌中。 所以,您可能要禁用查詢緩存。更多參數的詳細信息,參考官方文檔https://mariadb.com/kb/en/mariadb-audit-plugin-options-and-system-variables/

 

 

簡單測試

 

# mkdir -p /var/log/mysql_audit

# chown mysql:mysql /var/log/mysql_audit/

 

在參數文件my.cnf裏面修改一些系統變量參數。以下所示

 

#############################MariaDB Audit Plugin####################################
plugin_load_add = server_audit
server_audit_logging=on
server_audit_events=CONNECT,TABLE,QUERY_DDL,QUERY_DCL,QUERY_DML_NO_SELECT
server_audit_file_path='/var/log/mysql_audit/'
server_audit_file_rotate_size=67108864
server_audit_file_rotations=128
 
#####################################################################################

 

這些參數只能在MySQL實例重啓後才能生效,而生產環境通常也不能隨隨便便重啓,因此策略通常是在修改my.cnf中參數的同時,而後使用命令修改這些插件的變量。

 

mysql> set global server_audit_file_path='/var/log/mysql_audit/';
Query OK, 0 rows affected (0.05 sec)
mysql> set global server_audit_events='CONNECT,TABLE,QUERY_DDL,QUERY_DCL,QUERY_DML_NO_SELECT';
Query OK, 0 rows affected (0.00 sec)
mysql> set global server_audit_file_rotations=128;
Query OK, 0 rows affected (0.00 sec)
mysql> set global server_audit_file_rotate_size=67108864;
Query OK, 0 rows affected (0.00 sec)
mysql>set global server_audit_logging=ON;
Query OK, 0 rows affected (0.00 sec)

 

 

而後你就能在審計日誌中看到相關內容了。簡單測試以下所示:

 

image

 

 

問題小結

 

1:MariaDB Audit Plugin安裝到社區版MySQL,有些版本還有一些問題。由於MySQL版本衆多,以及API接口的變化,致使MariaDB Audit Plugin有一些Bug,有一些已經Fix掉了,一些暫時尚未。

 

https://jira.mariadb.org/browse/MDEV-19396

https://jira.mariadb.org/browse/MDEV-9106

 

 

我的在測試時發現,MySQL 8.0.18安裝mariadb-5.5.64下的MariaDB Audit Plugin插件是報下面錯誤:

 

mysql> INSTALL PLUGIN server_audit SONAME 'server_audit.so';
ERROR 1126 (HY000): Can't open shared library '/usr/lib64/mysql/plugin/server_audit.so' (errno: 2 /usr/lib64/mysql/plugin/server_audit.so: undefined symbol: my_printf_error)
mysql> 

 

 

2:很多MariaDB通常多使用2.14版glibc進行編譯,因此安裝插件須要依賴GLIBC_2.14組件

 

 

mysql> INSTALL PLUGIN server_audit SONAME 'server_audit.so';
 
ERROR 1126 (HY000): Can't open shared library '/usr/lib64/mysql/plugin/server_audit.so' (errno: 2 /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /usr/lib64/mysql/plugin/server_audit.so))
 
mysql>

 

 

 

 

參考資料:

https://mariadb.com/kb/en/mariadb-audit-plugin-log-settings/

https://mariadb.com/kb/en/mariadb-audit-plugin-options-and-system-variables/

https://mariadb.com/kb/en/mariadb-audit-plugin-versions/

https://mariadb.com/kb/en/mariadb-audit-plugin/

相關文章
相關標籤/搜索