MySQL審計插件-MariaDB Audit Plugin

来源:https://www.cnblogs.com/greatsql/archive/2023/02/22/17143481.html
-Advertisement-
Play Games

小編提醒:拿MariaDB的so去MySQL里install,這種方式很容易導致 audit plugin工作異常,不推薦這麼做。強烈建議使用GreatSQL,自帶 audit plugin。 前言 資料庫審計功能主要將用戶對資料庫的各類操作行為記錄審計日誌,以便日後進行跟蹤、查詢、分析,以實現對用 ...


小編提醒:拿MariaDB的so去MySQL里install,這種方式很容易導致 audit plugin工作異常,不推薦這麼做。強烈建議使用GreatSQL,自帶 audit plugin。

前言

資料庫審計功能主要將用戶對資料庫的各類操作行為記錄審計日誌,以便日後進行跟蹤、查詢、分析,以實現對用戶操作的監控和審計。審計是一項非常重要的工作,也是企業數據安全體系的重要組成部分,等保測評中也要求有審計日誌。對於 DBA 而言,資料庫審計也極其重要,特別是發生人為事故後,審計日誌便於進行責任追溯,問題查找。

當前 MySQL 社區版本並沒有提供相關的插件使用,雖然 MySQL 提供有 binlog 及 general log ,這二者雖然具備部分審計功能,但一般不當做審計日誌來看待。

常見的審計插件有 MariaDB Audit Plugin、Percona Audit Log Plugin、McAfee MySQL Audit Plugin 三種,MariaDB 自帶的審計插件比較適合用於 MySQL 社區版,下麵我們來學習下如何使用審計插件來實現審計功能。

首先我們需要安裝一個MySQL,該步驟就先跳過一下。

MariaDB Auditing Plugin的安裝

MariaDB 審計插件的名稱是 server_audit.so(Windows系統下是 server_audit.dll ),要註意的是,審計插件一直在更新,不同版本的審計插件功能也不同,推薦使用 >= 1.4.4 版本的插件。

由於 MariaDB Auditing Plugin 集成在MariaDB裡面,沒有單獨提供,所以我們需要先下載一個MariaDB。

下麵我們以 CentOS 系統 MySQL 5.7 版本為例來安裝下審計插件:

MariaDB下載地址:https://mariadb.com/kb/en/postdownload/mariadb-server-5-5-64/

進入plugin子目錄,查看下是否要另外安裝依賴

#tar xvpf tar xvpf mariadb-5.5.64-linux-systemd-x86_64.tar.gz
#cd mariadb-10.2.44-linux-systemd-x86_64/lib/plugin
#ldd server_audit.so
ldd: warning: you do not have execution permission for `./server_audit.so'
        linux-vdso.so.1 =>  (0x00007ffdc613d000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f2b1c722000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f2b1c354000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f2b1cb4f000)

查看MySQL plugin的存放地址

mysql> show global variables like 'plugin_dir';
+---------------+--------------------------------+
| Variable_name | Value                          |
+---------------+--------------------------------+
| plugin_dir    | /usr/local/mysql57/lib/plugin/ |
+---------------+--------------------------------+
1 row in set (0.00 sec)

將mariadb 的審計插件 server_audit.so文件複製到該路徑下,並更改插件屬主及許可權

#cp server_audit.so /usr/local/mysql57/lib/plugin/
#chmod +x /usr/local/mysql57/lib/plugin/server_audit.so
#chown mysql.mysql /usr/local/mysql57/lib/plugin/server_audit.so

線上安裝插件

mysql> INSTALL PLUGIN server_audit SONAME 'server_audit.so';
Query OK, 0 rows affected (0.08 sec)
mysql> show plugins;
+----------------------------+--------+--------------------+-----------------+---------+
| Name                       | Status | Type               | Library         | License |
+----------------------------+--------+--------------------+-----------------+---------+
...
| SERVER_AUDIT               | ACTIVE | AUDIT              | server_audit.so | GPL     |
+----------------------------+--------+--------------------+-----------------+---------+

查看audit相關參數

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)

參數說明

  • server_audit_events:指定記錄事件的類型,可以用逗號分隔的多個值(connect,query,table),預設為空代表審計所有事件
  • server_audit_excl_users:用戶白名單,該列表中的用戶行為將不記錄
  • server_audit_file_path:存儲日誌的文件,預設在數據目錄的 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: 內部參數,用不到
  • server_audit_logging:啟動或關閉審計,預設OFF,啟動 ON
  • server_audit_mode:標識版本,用於開發測試
  • server_audit_output_type:指定日誌輸出類型,可為SYSLOG或FILE
  • server_audit_query_log_limit: 記錄中查詢字元串的長度限制。預設為1024
  • server_audit_syslog_facility:預設為LOG_USER,指定facility
  • server_audit_syslog_ident:設置ident,作為每個syslog記錄的一部分
  • server_audit_syslog_info:指定的info字元串將添加到syslog記錄
  • server_audit_syslog_priority:定義記錄日誌優先順序

啟用審計功能

set global server_audit_logging=on;
set global server_audit_events='connect,query,table,query_ddl,query_dcl,query_dml_no_select';
set global server_audit_file_path='/var/log/server_audit.log';
set global server_audit_file_rotate_size=104857600;

[mysqld]下添加以下配置,使得配置永久生效:

server_audit_logging=on
server_audit_events=connect,query,table,query_ddl,query_dcl,query_dml_no_select
server_audit_file_path=/var/log/server_audit.log
server_audit_file_rotate_size=104857600

功能測試

從另外一臺遠程連接到資料庫上,執行一些操作

[root@mgr2 ~]# mysql -uauth -p123456 -h192.168.***.*** -P***
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.26-log Source distribution

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> create database test;
Query OK, 1 row affected (0.03 sec)

mysql> use test;
Database changed
mysql> create  table t1(id int);
Query OK, 0 rows affected (0.09 sec)

mysql> insert into t1  values (1);
Query OK, 1 row affected (0.02 sec)

mysql> delete from t1 where id=1;
Query OK, 1 row affected (0.03 sec)

mysql> exit
Bye
[root@mgr2 ~]# mysql -uauth -p12345 -h192.168.***.*** -P***
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'auth'@'192.168.***.*** (using password: YES)

查看相應日誌升級對應的操作記錄

20220723 21:28:34,mgr3,auth,192.168.*.*,3,0,CONNECT,,,0
20220723 21:28:34,mgr3,auth,192.168.*.*,3,9,QUERY,,'select @@version_comment limit 1',0
20220723 21:28:47,mgr3,auth,192.168.*.*,3,10,QUERY,,'show databases',0
20220723 21:28:57,mgr3,auth,192.168.*.*,3,11,QUERY,,'create database test',0
20220723 21:28:59,mgr3,auth,192.168.*.*,3,12,QUERY,,'SELECT DATABASE()',0
20220723 21:28:59,mgr3,auth,192.168.*.*,3,14,QUERY,test,'show databases',0
20220723 21:28:59,mgr3,auth,192.168.*.*,3,15,QUERY,test,'show tables',0
20220723 21:29:09,mgr3,auth,192.168.*.*,3,16,QUERY,test,'create  table t1(id int)',0
20220723 21:29:17,mgr3,auth,192.168.*.*,3,17,QUERY,test,'insert into t1  values (1)',0
20220723 21:29:24,mgr3,auth,192.168.*.*,3,18,QUERY,test,'delete from t1 where id=1',0
20220723 21:29:48,mgr3,auth,192.168.*.*,3,0,DISCONNECT,test,,0
20220723 21:29:59,mgr3,auth,192.168.*.*,4,0,FAILED_CONNECT,,,1045

至此,我們完成審計插件的初步使用,從審計日誌內容中我們可以看出,記錄的格式還是很清晰詳細的,每列內容都是需要的,根據日誌很容易查到對應的操作。不過審計插件也是有優缺點的,優劣勢整理如下:

server_audit 審計插件優勢:

  • 豐富的審計內容:包括用戶連接,關閉,DML操作,存儲過程,觸發器,事件等。
  • 靈活的審計策略:可以自定義審計事件,例如過濾掉select查詢,或者排除審計某個用戶等。
  • 靈活方便:免費使用且安裝方便,可以線上開啟和停用審計功能。

server_audit 審計插件劣勢:

  • 開啟審計會增加資料庫的性能開銷,並占用磁碟空間。
  • 日誌格式不夠豐富,不能自定義輸出格式。

Enjoy GreatSQL

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...