自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

聊聊MySQL連接控制插件

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

[[423064]]

前言:

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

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

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

  • CONNECTION_CONTROL:用來控制登錄失敗的次數(shù)及延遲響應(yīng)時間。
  • 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 即可。

  1. # 動態(tài)安裝 connection_control 插件 
  2. mysql> INSTALL PLUGIN CONNECTION_CONTROL SONAME 'connection_control.so'
  3. Query OK, 0 rows affected (0.04 sec) 
  4.  
  5. mysql> INSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS SONAME 'connection_control.so'
  6. Query OK, 0 rows affected (0.01 sec) 
  7.  
  8. # 驗證插件狀態(tài) 
  9. mysql> SELECT 
  10.     -> PLUGIN_NAME,PLUGIN_STATUS  
  11.     -> FROM 
  12.     -> INFORMATION_SCHEMA.PLUGINS  
  13.     -> WHERE 
  14.     -> PLUGIN_NAME LIKE 'connection%'
  15. +------------------------------------------+---------------+ 
  16. | PLUGIN_NAME                              | PLUGIN_STATUS | 
  17. +------------------------------------------+---------------+ 
  18. | CONNECTION_CONTROL                       | ACTIVE        | 
  19. | CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS | ACTIVE        | 
  20. +------------------------------------------+---------------+ 
  21.  
  22. # 安裝完成后 可以看到相關(guān)系統(tǒng)變量 
  23. mysql> show variables like 'connection_control%'
  24. +-------------------------------------------------+------------+ 
  25. | Variable_name                                   | Value      | 
  26. +-------------------------------------------------+------------+ 
  27. | connection_control_failed_connections_threshold | 3          | 
  28. | connection_control_max_connection_delay         | 2147483647 | 
  29. | connection_control_min_connection_delay         | 1000       | 
  30. +-------------------------------------------------+------------+ 

可以看出,插件安裝還是很簡單的,不過這個插件具體有什么作用呢?我們先來解釋下相關(guān)系統(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ù)后,服務(wù)端會進行一段時間的響應(yīng)延遲,連續(xù)失敗嘗試的次數(shù)越多,響應(yīng)延遲時間越長。

2.連接控制實驗

我們來具體做下實驗,為了實驗效果,這里將失敗次數(shù)閾值設(shè)為 10 ,延遲最小時間設(shè)為 1 分鐘,即當連續(xù)連接失敗十次后,延遲響應(yīng)時間最低為 1 分鐘,下面我們故意輸錯密碼來試試看:

  1. # 初始狀態(tài) 
  2. mysql> show variables like 'connection_control%'
  3. +-------------------------------------------------+------------+ 
  4. | Variable_name                                   | Value      | 
  5. +-------------------------------------------------+------------+ 
  6. | connection_control_failed_connections_threshold | 10         | 
  7. | connection_control_max_connection_delay         | 2147483647 | 
  8. | connection_control_min_connection_delay         | 60000      | 
  9. +-------------------------------------------------+------------+ 
  10. rows in set (0.01 sec) 
  11.  
  12. mysql> SELECT * FROM information_schema.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS; 
  13. Empty set (0.00 sec) 
  14.  
  15. # 故意輸錯密碼 
  16. [root@localhost ~]# mysql -utestuser -p123 
  17. mysql: [Warning] Using a password on the command line interface can be insecure. 
  18. ERROR 1045 (28000): Access denied for user 'testuser'@'localhost' (using password: YES) 
  19.  
  20. # 查看失敗記錄 
  21. mysql> SELECT * FROM information_schema.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS; 
  22. +----------------+-----------------+ 
  23. | USERHOST       | FAILED_ATTEMPTS | 
  24. +----------------+-----------------+ 
  25. 'testuser'@'%' |               1 | 
  26. +----------------+-----------------+ 
  27. 1 row in set (0.00 sec) 
  28.  
  29. # 當連續(xù)失敗次數(shù)超過閾值后 再次進行連接會產(chǎn)生延遲 即延遲一定時間后才會返回密碼是否正確 
  30. mysql> SELECT * FROM information_schema.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS; 
  31. +----------------+-----------------+ 
  32. | USERHOST       | FAILED_ATTEMPTS | 
  33. +----------------+-----------------+ 
  34. 'testuser'@'%' |              10 | 
  35. +----------------+-----------------+ 
  36. mysql> show processlist; 
  37. +---------+----------+--------------------+--------------------+---------+-------+--------------------------------------+------------------+ 
  38. | Id      | User     | Host               | db                 | Command | Time  | State                                | Info             | 
  39. +---------+----------+--------------------+--------------------+---------+-------+--------------------------------------+------------------+ 
  40. | 1817003 | root     | localhost          | NULL               | Query   |     0 | starting                             | show processlist | 
  41. | 1817091 | testuser | localhost          | NULL               | Connect |    16 | Waiting in connection_control plugin | NULL             | 
  42. +---------+----------+--------------------+--------------------+---------+-------+--------------------------------------+------------------+ 

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

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

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

 

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

 

責任編輯:武曉燕 來源: MySQL技術(shù)
相關(guān)推薦

2023-10-08 12:14:42

Sentinel流量控制

2023-09-21 08:05:49

Mybatis插件開發(fā)

2022-09-28 11:09:38

自動化產(chǎn)品工業(yè)協(xié)議

2022-03-17 00:07:00

工業(yè)控制系統(tǒng)

2024-08-26 13:23:26

2021-06-28 11:29:50

生成水印插件

2021-01-13 11:11:29

TCP連接耗時網(wǎng)絡(luò)協(xié)議

2023-11-09 11:56:28

MySQL死鎖

2021-11-17 08:11:35

MySQL

2023-06-12 09:09:19

MySQLDDLNSTANT

2019-01-07 12:02:02

TCP長連接Java

2022-04-02 10:23:12

MySQL數(shù)據(jù)庫

2024-07-16 10:25:27

2020-05-06 22:07:53

UbuntuLinux操作系統(tǒng)

2022-11-26 08:16:26

2024-01-15 08:41:25

SwiftTypeScrip語法

2021-02-26 07:35:57

Git版本工具

2022-07-27 08:31:28

SQL開發(fā)控制

2017-08-21 10:56:55

MySQL并發(fā)控制

2022-08-08 17:38:45

Spring策略事務(wù)
點贊
收藏

51CTO技術(shù)棧公眾號