MySQL的防火牆功能

MySQL的防火牆功能

防火牆——將保護您免受任何軟件中至少50%的全部類型的***。MySQL在企業版裏爲用戶提供了防火牆功能。html

MySQL的防火牆提供應用級別的防禦,數據庫管理員能夠經過防火牆容許或拒絕SQL文的執行。經過它能夠防止SQL注入***以及非法利用數據庫。mysql

MySQL的防火牆是基於每一個用戶的白名單(白名單記錄的是摘要語句,用戶能夠自定義長度)實現,每一個用戶的防火牆模式有三種,記錄、保護和檢測模式。工做流程能夠參考下圖:sql

MySQL的防火牆功能

當服務器接收到客戶端的SQL語句以後,通過解析器標識到達防火牆。防火牆會基於用戶採用的模式進行判斷,若是未開啓防火牆將進入執行SQL階段。若是開啓了防火牆的記錄模式,防火牆會將這些SQL語句存儲到白名單。若是是其它模式,防火牆將會與白名單內容進行匹配,若是SQL語句不匹配,將會發送警告至錯誤日誌,若是開啓的是保護模式,則阻擋該SQL語句執行。數據庫

MySQL的防火牆主要由如下幾個組件構成:緩存

  • 服務器端名爲MYSQL_FIREWALL 的插件:該插件主要負責校驗SQL語句是否與白名單匹配。安全

  • MYSQL_FIREWALL_USERS 和 MYSQL_FIREWALL_WHITELIST 視圖:用於緩存防禦牆的白名單和用戶數據。服務器

  • firewall_users 和 firewall_whitelist系統表:位於mysql系統數據庫,用於存放防火牆的白名單和用戶數據。ide

  • sp_set_firewall_mode() 和 sp_reload_firewall_rules():兩個存儲過程用於設置防火牆的模式和加載防火牆規則。

防火牆的安裝過程很是簡單,能夠經過MySQL WorkBench進行安裝,也能夠手動進行安裝,安裝過程在這裏不進行詳述,能夠訪問官網手冊:「https://dev.mysql.com/doc/refman/8.0/en/firewall-installation.html」。插件

MySQL防火牆的使用方法也很是簡單,在這裏舉一個簡單的例子進行說明。防火牆除了能夠防止遭受注入***等安全事件,還能夠利用它對SQL語句的執行進行規範和限制,例如,刪除或更新語句不加上where條件等等。日誌

安裝好防火牆以後,默認是開啓的,能夠經過下面語句確認:

mysql> SHOW GLOBAL VARIABLES LIKE 'mysql_firewall_mode';

以後,能夠對用戶開啓記錄模式:

MySQL的防火牆功能
開啓記錄模式以後,能夠對白名單進行訓練,使應用程序的完整遍歷週期裏用到的SQL語句保存至白名單。在這裏以delete語句爲例:

MySQL的防火牆功能

記錄以後,能夠查看一下白名單的內容:

MySQL的防火牆功能

MySQL的防火牆功能
能夠看到白名單裏面記錄了一條帶有where條件的delete語句,接下來咱們開啓保護模式,並執行一下不帶where條件的delete語句:

MySQL的防火牆功能

能夠看到,未加where條件的delete語句被防火牆阻擋。

管理員能夠經過show status語句查看防火牆的狀態和阻擋語句的數量:

上面是一個小小的示例,你能夠嘗試更多的使用方法,以保證MySQL的安全。

相關文章
相關標籤/搜索