MySQL連接控制插件介紹
1.連接控制(connection_control)插件介紹
MySQL
服務(wù)端包含一個(gè)插件庫(kù),可以自定義安裝各類插件。connection_control
插件也是其中一種,主要用來控制客戶端在登錄操作連續(xù)失敗一定次數(shù)后的響應(yīng)的延遲。該插件可有效的防止客戶端暴力登錄的風(fēng)險(xiǎn)。該插件包含以下兩個(gè)組件:
- CONNECTION_CONTROL:用來控制登錄失敗的次數(shù)及延遲響應(yīng)時(shí)間。
- CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS:將登錄失敗的操作記錄至
information_schema
系統(tǒng)庫(kù)中。
連接控制插件文件的基本名稱為 connection_control
。每個(gè)平臺(tái)的文件名后綴有所不同(對(duì)于 Unix
和類 Unix
系統(tǒng)為 .so ,對(duì)于 Windows
為 .dll
)。下面以 Linux
系統(tǒng)為例來安裝下 connection_control
插件,Windows
系統(tǒng)只需要將 .so 改成 .dll 即可。
1.1 動(dòng)態(tài)安裝 connection_control 插件
mysql> INSTALL PLUGIN CONNECTION_CONTROL SONAME 'connection_control.so'; Query OK, 0 rows affected (0.04 sec) mysql> INSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS SONAME 'connection_control.so'; Query OK, 0 rows affected (0.01 sec)
1.2 驗(yàn)證插件狀態(tài)
mysql> SELECT -> PLUGIN_NAME,PLUGIN_STATUS -> FROM -> INFORMATION_SCHEMA.PLUGINS -> WHERE -> PLUGIN_NAME LIKE 'connection%'; +------------------------------------------+---------------+ | PLUGIN_NAME | PLUGIN_STATUS | +------------------------------------------+---------------+ | CONNECTION_CONTROL | ACTIVE | | CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS | ACTIVE | +------------------------------------------+---------------+
1.3 安裝完成后 可以看到相關(guān)系統(tǒng)變量
mysql> show variables like 'connection_control%'; +-------------------------------------------------+------------+ | Variable_name | Value | +-------------------------------------------------+------------+ | connection_control_failed_connections_threshold | 3 | | connection_control_max_connection_delay | 2147483647 | | connection_control_min_connection_delay | 1000 | +-------------------------------------------------+------------+
可以看出,插件安裝還是很簡(jiǎn)單的,不過這個(gè)插件具體有什么作用呢?我們先來解釋下相關(guān)系統(tǒng)變量:
connection_control_failed_connections_threshold
:允許帳戶進(jìn)行的連續(xù)失敗嘗試的次數(shù)。默認(rèn)為 3 ,表示當(dāng)連接失敗 3 次后啟用連接控制,0 表示不開啟。connection_control_max_connection_delay
:超出閾值的連接失敗的最大延遲(以毫秒為單位),默認(rèn) 2147483647 毫秒,約 25 天。connection_control_min_connection_delay
:超過閾值的連接失敗的最小延遲(以毫秒為單位),默認(rèn) 1000 毫秒,即 1 秒。
至此,你可能明白了 connection_control
插件的作用,那就是當(dāng)客戶端連接數(shù)據(jù)庫(kù)連續(xù)失敗到達(dá)一定次數(shù)后,服務(wù)端會(huì)進(jìn)行一段時(shí)間的響應(yīng)延遲,連續(xù)失敗嘗試的次數(shù)越多,響應(yīng)延遲時(shí)間越長(zhǎng)。
2.連接控制實(shí)驗(yàn)
我們來具體做下實(shí)驗(yàn),為了實(shí)驗(yàn)效果,這里將失敗次數(shù)閾值設(shè)為 10 ,延遲最小時(shí)間設(shè)為 1 分鐘,即當(dāng)連續(xù)連接失敗十次后,延遲響應(yīng)時(shí)間最低為 1 分鐘,下面我們故意輸錯(cuò)密碼來試試看:
2.1 初始狀態(tài)
mysql> show variables like 'connection_control%'; +-------------------------------------------------+------------+ | Variable_name | Value | +-------------------------------------------------+------------+ | connection_control_failed_connections_threshold | 10 | | connection_control_max_connection_delay | 2147483647 | | connection_control_min_connection_delay | 60000 | +-------------------------------------------------+------------+ 3 rows in set (0.01 sec)
mysql> SELECT * FROM information_schema.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS; Empty set (0.00 sec)
2.2 故意輸錯(cuò)密碼
[root@localhost ~]# mysql -utestuser -p123 mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 1045 (28000): Access denied for user 'testuser'@'localhost' (using password: YES)
2.3 查看失敗記錄
mysql> SELECT * FROM information_schema.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS; +----------------+-----------------+ | USERHOST | FAILED_ATTEMPTS | +----------------+-----------------+ | 'testuser'@'%' | 1 | +----------------+-----------------+ 1 row in set (0.00 sec) # 當(dāng)連續(xù)失敗次數(shù)超過閾值后 再次進(jìn)行連接會(huì)產(chǎn)生延遲 即延遲一定時(shí)間后才會(huì)返回密碼是否正確 mysql> SELECT * FROM information_schema.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS; +----------------+-----------------+ | USERHOST | FAILED_ATTEMPTS | +----------------+-----------------+ | 'testuser'@'%' | 10 | +----------------+-----------------+ mysql> show processlist; +---------+----------+--------------------+--------------------+---------+-------+--------------------------------------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +---------+----------+--------------------+--------------------+---------+-------+--------------------------------------+------------------+ | 1817003 | root | localhost | NULL | Query | 0 | starting | show processlist | | 1817091 | testuser | localhost | NULL | Connect | 16 | Waiting in connection_control plugin | NULL | +---------+----------+--------------------+--------------------+---------+-------+--------------------------------------+------------------+
正常情況下,輸錯(cuò)密碼是即刻返回錯(cuò)誤的,當(dāng)連續(xù)失敗次數(shù)達(dá)到閾值后,再次進(jìn)行連接嘗試,則會(huì)延遲響應(yīng),具體表現(xiàn)就是一直卡著,到延遲結(jié)束后才返回錯(cuò)誤。information_schema
系統(tǒng)庫(kù)中的表會(huì)記錄登錄失敗的用戶名及失敗次數(shù),當(dāng)延遲發(fā)生時(shí),從 processlist
中也可以查到正在延遲的連接。若輸入密碼正確,則會(huì)取消延遲、重新計(jì)數(shù)。
于是乎,你應(yīng)該理解了為什么此插件能防止客戶端暴力破解,假設(shè)暴力破解每分鐘嘗試 120 次,現(xiàn)在啟用該插件后,連續(xù)失敗一定次數(shù)后就會(huì)響應(yīng)延遲,并且隨著失敗次數(shù)的增加延遲時(shí)間也會(huì)增加,原來能立即開始下次破解,現(xiàn)在只能到延遲時(shí)間后才能發(fā)起下次嘗試,所以能極大降低被暴力破解的風(fēng)險(xiǎn)。
不過啟用連接控制插件后要注意是否存在延遲的連接,因?yàn)檎谘舆t的連接也是占用連接數(shù)的,可能會(huì)引起連接積壓導(dǎo)致連接數(shù)不夠用。所以當(dāng)出現(xiàn)延遲的連接時(shí),應(yīng)盡快排查到底是那里在連接,確保密碼輸入正確。
若要啟用此插件,注意要配置合適的閾值及延遲時(shí)間,并記得將這些參數(shù)寫入配置文件。一般等保評(píng)測(cè)可能會(huì)有這項(xiàng)要求,這個(gè)時(shí)候連接控制插件會(huì)用得上。
到此這篇關(guān)于MySQL
連接控制插件介紹的文章就介紹到這了,更多相關(guān)MySQL
連接控制插件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 基于JavaSwing+mysql開發(fā)一個(gè)學(xué)生社團(tuán)管理系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)
- MySQL深分頁(yè)問題解決的實(shí)戰(zhàn)記錄
- MySQL中l(wèi)imit對(duì)查詢語(yǔ)句性能的影響
- 基于JavaSwing設(shè)計(jì)和實(shí)現(xiàn)的酒店管理系統(tǒng)
- JavaSwing坦克大戰(zhàn)游戲的設(shè)計(jì)和實(shí)現(xiàn)
- JavaSwing基礎(chǔ)之Layout布局相關(guān)知識(shí)詳解
- JavaSwing后臺(tái)播放音樂mp3
- 基于Mysql+JavaSwing的超市商品管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
相關(guān)文章
詳解監(jiān)聽MySQL的binlog日志工具分析:Canal
Canal主要用途是基于MySQL數(shù)據(jù)庫(kù)增量日志解析,提供增量數(shù)據(jù)訂閱和消費(fèi),目前主要支持MySQL。接下來通過本文給大家介紹監(jiān)聽MySQL的binlog日志工具分析:Canal的相關(guān)知識(shí),感興趣的朋友一起看看吧2020-10-10mysql5.5 master-slave(Replication)配置方法
mysql5.5 master-slave(Replication)配置方法,需要的朋友可以參考下。2011-08-08MySQL中MVCC機(jī)制的實(shí)現(xiàn)原理
這篇文章主要介紹了MySQL中MVCC機(jī)制的實(shí)現(xiàn)原理,MVCC多版本并發(fā)控制,MySQL中一種并發(fā)控制的方法,他主要是為了提高數(shù)據(jù)庫(kù)的讀寫性能,用更好的方式去處理讀寫沖突2022-08-08關(guān)于MySQL性能調(diào)優(yōu)你必須了解的15個(gè)重要變量(小結(jié))
MYSQL 應(yīng)該是比較流行的 WEB 后端數(shù)據(jù)庫(kù)。雖然 NOSQL 最近越來越多的被提到,但是相信大部分架構(gòu)師還是會(huì)選擇 MYSQL 來做數(shù)據(jù)存儲(chǔ)。本文作者總結(jié)梳理MySQL性能調(diào)優(yōu)的15個(gè)重要變量,感興趣的可以了解一下2019-07-07