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的功能吧!
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;
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
在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
查看受稽核的user
mysql> select * from mysql.audit_log_user;
再來我們從其他機器用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
Nini做的動作都被記錄下來了哦。