給MariaDB開啟日誌審計功能

  • 2019 年 10 月 5 日
  • 筆記

如果很多運維或者開發都分配了數據庫的操作權限的話,某一天表或者字段丟失了都無法找到誰幹的,這個鍋只能運維來背了,因此有必要給數據庫的操作記錄保存下來。

下面來演示下如何操作:

軟件版本:

    MariaDB10.0.17    (自帶了server_audit插件)

MariaDB審計日誌寫到文件

安裝server_audit插件

登陸進MariaDB,執行:

> show variables like '%plugin%';  查看插件存放的目錄

cd /usr/local/mariadb/lib/plugin/  查看有沒有一個叫做server_audit.so的文件。

如果沒有的話,到http://www.skysql.com/downloads/mariadb-audit-plugin-beta去下載放到/usr/local/mariadb/lib/plugin/目錄下即可。

安裝插件

> INSTALL PLUGIN server_audit SONAME'server_audit.so';

或者編輯/etc/my.cnf添加

[mysqld]  plugin-load=server_audit=server_audit.so

然後重啟mariadb。

查看相關的全局變量

> show variables like '%audit%';

打開日誌的審計功能

> set global server_audit_logging=on;

但是服務重啟後會失效,可以通過在配置文件添加避免這個問題:

[mysqld]  server_audit_logging=on

查看audit插件的運行狀態:

> show global status like '%audit%';

server_audit_active :ON (表示server_audit插件在運行);

server_audit_current_log : server_audit.log(審計日誌路徑和日誌名);

server_audit_last_error : 錯誤消息;

server_audit_writes_failed : 因錯誤沒有記錄的日誌條目數

設置變量

> set GLOBAL server_audit_events='CONNECT,QUERY,TABLE';  > set GLOBAL server_audit_incl_users ='test_user,root';  > set GLOBAL server_audit_excl_users='lirl';   > set GLOBALserver_audit_file_rotate_size=200000000;   (單位:位元組)  > set GLOBAL server_audit_file_rotations=9;

為了防止server_audit插件被卸載,需要在配置文件中添加:

[mysqld]

server_audit=FORCE_PLUS_PERMANENT

重啟MySQL生效。

或者我們直接在/etc/my.cnf的[mysqld]段添加上下面的內容,再重啟MariaDB即可,上面的全部亂七八糟的設置就能都生效,省得那麼多步驟。

# audit plugin settings  plugin-load = server_audit.so  server_audit = FORCE_PLUS_PERMANENT  server_audit_events = 'CONNECT,QUERY,TABLE'  server_audit_logging = ON  server_audit_incl_users = test1,root  server_audit_file_rotate_size =10G  server_audit_file_path  = /usr/local/mariadb/var/server_audit.log

重啟MariaDB後,我們tail -f /usr/local/mariadb/var/server_audit.log監控這個文件。

另開一個xshell終端,登陸mysql即可看到日誌在刷新,例如查詢修改操作都被記錄下來了。

卸載server_audit的方法:

> UNINSTALL PLUGIN server_audit;  > show variables like '%audit%';   驗證是否卸載完

卸載的步驟:

1、需要先在配置文件里把server_audit相關的配置項目注釋掉,再重啟mariadb。

2、再來執行UNINSTALL PLUGIN server_audit;才能卸載掉這個插件。

3、卸載插件完成後,執行show variables like '%audit%';仍然能看到這個插件的可用參數,再次重啟mariadb才行。

MariaDB審計日誌寫到syslog

和寫入到日誌文件中的配置方法基本相同,就是多了一條顯式的指定日誌的存儲方式而已。簡單演示下即可。

操作如下:

> INSTALL PLUGIN server_audit SONAME'server_audit.so';  > SET GLOBALserver_audit_output_type=SYSLOG;  > SET GLOBALserver_audit_events='CONNECT,QUERY,TABLE';  > SET GLOBAL server_audit_logging=on;  > show variables like '%audit%';
> show status like '%audit%';

重啟rsyslog服務

# /etc/init.d/rsyslog restart

然後連接到mysql執行些數據庫、表的操作,可以tail -f /var/log/message裏面看到操作的內容。

默認的操縱日誌都打在/var/log/message裏面,不方便我們查看,可以修改下/etc/rsyslog.conf,

在*.info;mail.none;authpriv.none;cron.none/var/log/messages的下面加一行:

if $programname =='mysql-server_auditing' then /var/log/mariadb_audit_log
# /etc/init.d/rsyslog restart   重啟rsyslog服務

這樣的話,就能將審計的日誌輸出到獨立的文件/var/log/mariadb_audit_log裏面。

(注意:審計日誌在/var/log/messages寫一遍,在/var/log/mariadb_audit_log再寫一遍,不是單單只寫到/var/log/mariadb_audit_log裏面的)

補充:MariaDB Audit Plugin和init-connect+binlog比較

1)、init-connect+binlog方案要求用戶對日誌表至少有insert權限,每添加一個新用戶都要進行授權,顯得比較麻煩;而MariaDB Audit Plugin默認會對所有用戶進行行為審計,不需要對新添加的用戶進行授權,MariaDB Audit Plugin還可以指定對哪些用戶進行行為審計,哪些用戶不需要進行行為審計;

2)、init-connect+binlog方案無法對具有super權限的用戶進行行為審計,而MariaDB Audit Plugin可以對所有用戶進行行為審計,包括具有super權限的用戶;

3)、init-connect+binlog方案需要修改配置文件之後重啟MySQL生效,而MariaDB Audit Plugin可以在線進行配置,無需重啟服務生效;

4)、init-connect+binlog方案審計信息輸出到binlog中,MariaDB Audit Plugin可以選擇將審計信息輸出到syslog或者自定義的路徑;