iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 15
1
AI & Data

一名合格的DBA要從底層一步步爬起系列 第 15

《Day15》使用MySQL 稽核功能

  • 分享至 

  • xImage
  •  

MySQL Enterprise提供一個簡單使用的稽核,幫助資料庫管理者實施安全控制。可以讓管理者篩選(filter)要對使用者做稽核的動作,而稽核日誌可以儲存JSON或是XML的格式,也能夠加密與壓縮,減少日誌所佔的容量空間。

稽核的類別分為:

母類別 子類別 說明
connection connect 連線動作(不管失敗或成功)
change_user 在同session使用不同user進行重新認證
disconnect 連線終止
general status 一般資訊
table_access read 使用read語句 EX:select or insert into … select
delete 使用delete語句 EX:delete or truncate table
insert 使用insert語句 EX:insert or replace
update 使用update語句 EX:update

以下我們來安裝測試看看Audit的功能吧!

安裝Audit

MySQL會幫我包好一個sql檔案( audit_log_filter_linux_install.sql ),執行此檔案會幫我們安裝Audit元件、建立存放audit filter的table與相關funciton。

mysql -uroot -p < /usr/share/mysql/audit_log_filter_linux_install.sql

確認audit已經安裝完成

mysql> show plugins;

https://ithelp.ithome.com.tw/upload/images/20200917/20129969hMpMEbvIYI.png

配置audit log位置

Audit log可以儲存三種格式,個別是old(舊式XML)、new(新式XML)與Json

vim /etc/my.cnf
[mysqld]

audit-log-file=/mysqlaudit/myaudit.log   #檔案路徑
audit-log-format=new      #new-style XML

重新啟動後生效

Systemctl restart mysqld

建立稽核動作

使用audit_log_filter_set_filter()新增稽核

filter_name :指定Filter名稱
filter_content :指定Filter內容(必須是json格式)
select audit_log_filter_set_filter(['filter_name '],[ 'filter_content '])
以下為[filter_content]輸入格式(Json)

{ 
   "filter": {
    "class": [
      {
        "name": "connection",
        "event": [
          { "name": "connect" },
	      { "name": "change_user"},
          { "name": "disconnect" } 
                  ]
      },
      { "name": "general" },
      {
        "name": "table_access",
        "event": [
          { "name": "insert" },
          { "name": "delete" },
          { "name": "update" },
          { "name": "read"   }
                 ]
      }
    ]
  }
}

注意:當我們還未定義稽核之前,audit log是不是有任何稽核的。

建立只針對連線時做稽核。

select audit_log_filter_set_filter('filter_connect','{ 
   "filter": {
    "class": [
      {
        "name": "connection",
        "event": [
          { "name": "connect" },
	      { "name": "change_user"},
          { "name": "disconnect" } 
                  ]
      }
    ]
  }
}');

若要稽核所有動作


select audit_log_filter_set_filter('filter_all','{ 
   "filter": {
    "class": [
      {
        "name": "connection",
        "event": [
          { "name": "connect" },
	      { "name": "change_user"},
          { "name": "disconnect" } 
                  ]
      },
      { "name": "general" },
      {
        "name": "table_access",
        "event": [
          { "name": "insert" },
          { "name": "delete" },
          { "name": "update" },
          { "name": "read"   }
                 ]
      }
    ]
  }
}');

建立完成會顯示OK

https://ithelp.ithome.com.tw/upload/images/20200917/20129969LazkkhXP50.png

查看filter

在mysql資料庫底下有一個audit_log_filter表,可以查看我們建立的filter。

mysql> select * from audit_log_filter;

建立稽核對象

使用audit_log_filter_set_user()指定
user_name :以user@host_name or %格式輸入
filter_name :Filter名稱
select audit_log_filter_set_user(['user_name'],[ 'filter_name'])

若我要對nini做所有稽核

mysql> select audit_log_filter_set_user('nini@%','filter_all');

完成會顯示OK

https://ithelp.ithome.com.tw/upload/images/20200917/20129969tZE5udMevC.png
查看受稽核的user

mysql> select * from mysql.audit_log_user;

https://ithelp.ithome.com.tw/upload/images/20200917/20129969NtBu2dh1Co.png

再來我們從其他機器用nini的身分操作看看是否會被稽核。

mysql -unini -p -h192.168.100.151
mysql> select * from t1;
mysql> insert into test.t1 values(3,'chichi');

查看audit log

cat /mysqlaudit/audit.log

https://ithelp.ithome.com.tw/upload/images/20200917/20129969fwbD8id2d9.png

Nini做的動作都被記錄下來了哦。


上一篇
《Day14》熟悉MySQL 備份還原
下一篇
《Day16》如何建置MySQL Innodb cluster
系列文
一名合格的DBA要從底層一步步爬起30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言