mysql 開啟安全審計(jì)功能可通過以下方式實(shí)現(xiàn):1. 使用 audit_log 插件(企業(yè)版自帶),通過 install plugin 加載并在配置文件中設(shè)置記錄事件、格式和路徑;2. 啟用通用日志和慢查詢?nèi)罩荆涗浰羞B接與 sql 操作;3. 配合 pt-query-digest、elk stack 等外部工具增強(qiáng)審計(jì)分析能力;4. 定期檢查、清理并輪轉(zhuǎn)日志文件,防止磁盤占滿影響服務(wù)。
安裝完 mysql 后,開啟安全審計(jì)功能是很多用戶關(guān)心的問題。其實(shí),MySQL 本身并沒有內(nèi)置完整的審計(jì)模塊,但可以通過插件或者日志功能來實(shí)現(xiàn)基本的審計(jì)需求。下面從幾個(gè)實(shí)用角度出發(fā),說說怎么配置 MySQL 的安全審計(jì)功能。
1. 使用 MySQL 審計(jì)插件(如 audit_log)
MySQL 企業(yè)版自帶了一個(gè)叫做 audit_log 的插件,可以記錄登錄、查詢、權(quán)限變更等操作。如果你使用的是社區(qū)版,這個(gè)插件是沒有的,需要自己找第三方插件或換用 mariadb。
啟用方法如下:
-
確認(rèn)插件是否存在:
SHOW PLUGINS;
看有沒有 audit_log 這個(gè)插件。
-
如果存在,可以通過以下命令加載:
INSTALL PLUGIN audit_log SONAME 'audit_log.so';
-
然后在 my.cnf 或 my.ini 中添加配置項(xiàng),比如記錄哪些事件、輸出格式、保存路徑等:
[mysqld] plugin-load-add=audit_log.so audit_log_format=JSON audit_log_file=/var/log/mysql/audit.log audit_log_policy=ALL
修改完配置文件后重啟 MySQL 生效。
2. 利用通用日志和慢查詢?nèi)罩咀龌A(chǔ)審計(jì)
如果你沒有企業(yè)版,也可以通過 MySQL 自帶的日志功能來做一些簡單的審計(jì):
- 通用日志(General Log):記錄所有客戶端連接和執(zhí)行的 SQL 語句。
- 慢查詢?nèi)罩荆⊿low Query Log):只記錄執(zhí)行時(shí)間較長的語句。
啟用方式很簡單,在配置文件中加上:
[mysqld] general_log = 1 general_log_file = /var/log/mysql/general.log slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 2
這樣就可以看到誰在什么時(shí)間執(zhí)行了哪些 SQL,雖然不如審計(jì)插件詳細(xì),但對排查問題也有幫助。
3. 配合外部工具加強(qiáng)審計(jì)能力
如果對安全性要求更高,可以考慮引入外部工具或服務(wù)來增強(qiáng)審計(jì)能力:
- pt-query-digest:可以分析慢查詢?nèi)罩荆页龈哳l或有問題的 SQL。
- ELK Stack(elasticsearch + Logstash + Kibana):將日志集中收集、可視化,方便追蹤。
- 數(shù)據(jù)庫防火墻類產(chǎn)品:有些商業(yè)產(chǎn)品會(huì)提供更完善的審計(jì)和防護(hù)機(jī)制。
這些工具配合 MySQL 的日志輸出,可以構(gòu)建出一個(gè)比較完整的審計(jì)體系。
4. 定期檢查和清理日志,避免磁盤占滿
不管你是用哪種方式做審計(jì),都別忘了定期查看和清理日志文件:
-
查看日志文件大小:
ls -lh /var/log/mysql/
-
清理日志(建議先備份):
> /var/log/mysql/general.log
-
設(shè)置自動(dòng)輪轉(zhuǎn)(logrotate),在 /etc/logrotate.d/mysql 中添加配置。
否則某天你會(huì)發(fā)現(xiàn) MySQL 因?yàn)榇疟P滿了突然掛掉,那就得不償失了。
基本上就這些。配置起來不算復(fù)雜,但關(guān)鍵是要根據(jù)自己的實(shí)際需求選擇合適的方式,并做好日志管理。