MySQL連接控制插件介紹

前言:

當連接數(shù)據(jù)庫失敗次數(shù)過多時,MySQL 是否會限制登錄呢邮利?數(shù)據(jù)庫服務端應該怎么應對暴力破解呢?本篇文章介紹下 MySQL 中的連接控制插件鲁冯,一起來學習下此插件的作用。

1.連接控制(connection_control)插件介紹

MySQL 服務端包含一個插件庫色查,可以自定義安裝各類插件薯演。connection_control 插件也是其中一種,主要用來控制客戶端在登錄操作連續(xù)失敗一定次數(shù)后的響應的延遲秧了。該插件可有效的防止客戶端暴力登錄的風險跨扮。該插件包含以下兩個組件:

  • CONNECTION_CONTROL:用來控制登錄失敗的次數(shù)及延遲響應時間。
  • CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS:將登錄失敗的操作記錄至 information_schema系統(tǒng)庫中验毡。

連接控制插件文件的基本名稱為 connection_control 衡创。每個平臺的文件名后綴有所不同(對于 Unix 和類 Unix 系統(tǒng)為 .so ,對于 Windows 為 .dll )晶通。下面以 Linux 系統(tǒng)為例來安裝下 connection_control 插件璃氢,Windows 系統(tǒng)只需要將 .so 改成 .dll 即可。

# 動態(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)

# 驗證插件狀態(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        |
+------------------------------------------+---------------+

# 安裝完成后 可以看到相關系統(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       |
+-------------------------------------------------+------------+

可以看出狮辽,插件安裝還是很簡單的一也,不過這個插件具體有什么作用呢?我們先來解釋下相關系統(tǒng)變量:

  • connection_control_failed_connections_threshold:允許帳戶進行的連續(xù)失敗嘗試的次數(shù)喉脖。默認為 3 塘秦,表示當連接失敗 3 次后啟用連接控制,0 表示不開啟动看。
  • connection_control_max_connection_delay:超出閾值的連接失敗的最大延遲(以毫秒為單位)尊剔,默認 2147483647 毫秒,約 25 天菱皆。
  • connection_control_min_connection_delay:超過閾值的連接失敗的最小延遲(以毫秒為單位)须误,默認 1000 毫秒,即 1 秒仇轻。

至此京痢,你可能明白了 connection_control 插件的作用,那就是當客戶端連接數(shù)據(jù)庫連續(xù)失敗到達一定次數(shù)后篷店,服務端會進行一段時間的響應延遲祭椰,連續(xù)失敗嘗試的次數(shù)越多,響應延遲時間越長疲陕。

2.連接控制實驗

我們來具體做下實驗方淤,為了實驗效果,這里將失敗次數(shù)閾值設為 10 蹄殃,延遲最小時間設為 1 分鐘携茂,即當連續(xù)連接失敗十次后,延遲響應時間最低為 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)

# 故意輸錯密碼
[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)

# 查看失敗記錄
mysql> SELECT * FROM information_schema.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS;
+----------------+-----------------+
| USERHOST       | FAILED_ATTEMPTS |
+----------------+-----------------+
| 'testuser'@'%' |               1 |
+----------------+-----------------+
1 row in set (0.00 sec)

# 當連續(xù)失敗次數(shù)超過閾值后 再次進行連接會產(chǎn)生延遲 即延遲一定時間后才會返回密碼是否正確
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             |
+---------+----------+--------------------+--------------------+---------+-------+--------------------------------------+------------------+

正常情況下讳苦,輸錯密碼是即刻返回錯誤的带膜,當連續(xù)失敗次數(shù)達到閾值后,再次進行連接嘗試鸳谜,則會延遲響應膝藕,具體表現(xiàn)就是一直卡著,到延遲結(jié)束后才返回錯誤咐扭。information_schema 系統(tǒng)庫中的表會記錄登錄失敗的用戶名及失敗次數(shù)芭挽,當延遲發(fā)生時,從 processlist 中也可以查到正在延遲的連接草描。若輸入密碼正確览绿,則會取消延遲策严、重新計數(shù)穗慕。

于是乎,你應該理解了為什么此插件能防止客戶端暴力破解妻导,假設暴力破解每分鐘嘗試 120 次逛绵,現(xiàn)在啟用該插件后,連續(xù)失敗一定次數(shù)后就會響應延遲倔韭,并且隨著失敗次數(shù)的增加延遲時間也會增加术浪,原來能立即開始下次破解,現(xiàn)在只能到延遲時間后才能發(fā)起下次嘗試寿酌,所以能極大降低被暴力破解的風險胰苏。

不過啟用連接控制插件后要注意是否存在延遲的連接,因為正在延遲的連接也是占用連接數(shù)的醇疼,可能會引起連接積壓導致連接數(shù)不夠用硕并。所以當出現(xiàn)延遲的連接時,應盡快排查到底是那里在連接秧荆,確保密碼輸入正確倔毙。

若要啟用此插件,注意要配置合適的閾值及延遲時間乙濒,并記得將這些參數(shù)寫入配置文件陕赃。一般等保評測可能會有這項要求,這個時候連接控制插件會用得上颁股。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末么库,一起剝皮案震驚了整個濱河市水泉,隨后出現(xiàn)的幾起案子拢切,更是在濱河造成了極大的恐慌,老刑警劉巖剥汤,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梧疲,死亡現(xiàn)場離奇詭異允睹,居然都是意外死亡运准,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門缭受,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胁澳,“玉大人,你說我怎么就攤上這事米者【禄” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵蔓搞,是天一觀的道長胰丁。 經(jīng)常有香客問我,道長喂分,這世上最難降的妖魔是什么锦庸? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮蒲祈,結(jié)果婚禮上甘萧,老公的妹妹穿的比我還像新娘。我一直安慰自己梆掸,他們只是感情好扬卷,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著酸钦,像睡著了一般怪得。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上卑硫,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天徒恋,我揣著相機與錄音,去河邊找鬼拔恰。 笑死因谎,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的颜懊。 我是一名探鬼主播财岔,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼河爹!你這毒婦竟也來了匠璧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤咸这,失蹤者是張志新(化名)和其女友劉穎夷恍,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體媳维,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡酿雪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年遏暴,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片指黎。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡朋凉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出醋安,到底是詐尸還是另有隱情杂彭,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布吓揪,位于F島的核電站亲怠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏柠辞。R本人自食惡果不足惜团秽,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钾腺。 院中可真熱鬧徙垫,春花似錦讥裤、人聲如沸放棒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽间螟。三九已至,卻和暖如春损肛,著一層夾襖步出監(jiān)牢的瞬間厢破,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工治拿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留摩泪,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓劫谅,卻偏偏與公主長得像见坑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子捏检,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容