成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL的Connection-Control插件

數(shù)據(jù)庫 MySQL
在Oracle和SQL Server數(shù)據(jù)庫中,可以設置一些復雜的賬號密碼策略,例如在失敗登錄超過N次即可鎖定賬號,那么在MySQL中能否也有這樣的功能呢?

[[381645]]

本文轉載自微信公眾號「DBA閑思雜想錄」,作者瀟湘隱者 。轉載本文請聯(lián)系DBA閑思雜想錄公眾號。  

在Oracle和SQL Server數(shù)據(jù)庫中,可以設置一些復雜的賬號密碼策略,例如在失敗登錄超過N次即可鎖定賬號,那么在MySQL中能否也有這樣的功能呢?答案是MySQL也有類似這樣的功能,只不過在MySQL中是在其登錄失敗超過閾值后,它是延遲響應時間,而不是鎖定賬號,在MySQL 5.6.35以后提供了Connection-Control插件用來控制客戶端在登錄操作連續(xù)失敗一定次數(shù)后的響應延遲。該插件可有效的防止客戶端暴力登錄的風險(攻擊)。該插件包含以下2個組件

  • CONNECTION_CONTROL:用來控制登錄失敗的次數(shù)及延遲響應時間
  • CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS:該表將登錄失敗的操作記錄至INFORMATION_SCHEMA庫中

下面我們介紹一下Connection-Control Plugins,下面實驗的版本為MySQL 8.0.18。

首先查看系統(tǒng)變量plugin_dir,找到插件(Plugins)所在的路徑,如下所示

  1. mysql> select version() from dual; 
  2. +-----------+ 
  3. | version() | 
  4. +-----------+ 
  5. | 8.0.18    | 
  6. +-----------+ 
  7. 1 row in set (0.00 sec) 
  8.   
  9.   
  10. mysql> show variables like 'plugin_dir'
  11. +---------------+--------------------------+ 
  12. | Variable_name | Value                    | 
  13. +---------------+--------------------------+ 
  14. | plugin_dir    | /usr/lib64/mysql/plugin/ | 
  15. +---------------+--------------------------+ 
  16. 1 row in set (0.01 sec) 
  17.   
  18.   
  19.   
  20. [root@KerryDB ~]# cd /usr/lib64/mysql/plugin/ 
  21. [root@KerryDB plugin]# ls -lrt 
  22. total 76388 
  23. -rwxr-xr-x. 1 root root   106696 Sep 20  2019 rewrite_example.so 
  24. -rwxr-xr-x. 1 root root   104432 Sep 20  2019 mysql_no_login.so 
  25. -rwxr-xr-x. 1 root root   111464 Sep 20  2019 mypluglib.so 
  26. -rwxr-xr-x. 1 root root   106648 Sep 20  2019 auth_socket.so 
  27. -rwxr-xr-x. 1 root root   163560 Sep 20  2019 adt_null.so 
  28. -rwxr-xr-x. 1 root root   409032 Sep 20  2019 validate_password.so 
  29. -rwxr-xr-x. 1 root root  9054776 Sep 20  2019 libpluginmecab.so 
  30. -rwxr-xr-x. 1 root root   344696 Sep 20  2019 authentication_ldap_sasl_client.so 
  31. -rwxr-xr-x. 1 root root  1145832 Sep 20  2019 rewriter.so 
  32. -rwxr-xr-x. 1 root root   625944 Sep 20  2019 ha_example.so 
  33. -rwxr-xr-x. 1 root root   388992 Sep 20  2019 semisync_slave.so 
  34. -rwxr-xr-x. 1 root root    32368 Sep 20  2019 component_log_sink_json.so 
  35. -rwxr-xr-x. 1 root root   235200 Sep 20  2019 component_audit_api_message_emit.so 
  36. -rwxr-xr-x. 1 root root   494720 Sep 20  2019 keyring_udf.so 
  37. -rwxr-xr-x. 1 root root   149280 Sep 20  2019 component_log_sink_syseventlog.so 
  38. -rwxr-xr-x. 1 root root  1446024 Sep 20  2019 semisync_master.so 
  39. -rwxr-xr-x. 1 root root  2277480 Sep 20  2019 mysql_clone.so 
  40. -rwxr-xr-x. 1 root root  1231376 Sep 20  2019 libmemcached.so 
  41. -rwxr-xr-x. 1 root root   454096 Sep 20  2019 component_mysqlbackup.so 
  42. -rwxr-xr-x. 1 root root   193336 Sep 20  2019 component_log_filter_dragnet.so 
  43. -rwxr-xr-x. 1 root root  1177352 Sep 20  2019 ha_mock.so 
  44. -rwxr-xr-x. 1 root root    83936 Sep 20  2019 locking_service.so 
  45. -rwxr-xr-x. 1 root root  1269784 Sep 20  2019 connection_control.so 
  46. -rwxr-xr-x. 1 root root  1280936 Sep 20  2019 innodb_engine.so 
  47. -rwxr-xr-x. 1 root root   442304 Sep 20  2019 component_validate_password.so 
  48. -rwxr-xr-x. 1 root root  1206024 Sep 20  2019 version_token.so 
  49. -rwxr-xr-x. 1 root root  2338880 Sep 20  2019 keyring_file.so 
  50. -rwxr-xr-x. 1 root root  2031912 Sep 20  2019 ddl_rewriter.so 
  51. -rwxr-xr-x. 1 root root 49246400 Sep 20  2019 group_replication.so 
  52. drwxr-xr-x. 2 root root     4096 Nov  6  2019 debug 

安裝插件

  1. mysql> INSTALL PLUGIN CONNECTION_CONTROL SONAME 'connection_control.so'
  2. Query OK, 0 rows affected (0.02 sec) 
  3. mysql> INSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS SONAME 'connection_control.so'
  4. Query OK, 0 rows affected (0.00 sec) 

檢查是否安裝成功

  1. mysql> show plugins; 
  2.   
  3. mysql> SELECT PLUGIN_NAME, PLUGIN_LIBRARY, PLUGIN_STATUS, LOAD_OPTION  
  4.     -> FROM INFORMATION_SCHEMA.PLUGINS  
  5.     -> WHERE PLUGIN_LIBRARY = 'CONNECTION_CONTROL.SO'
  6. +------------------------------------------+-----------------------+---------------+-------------+ 
  7. | PLUGIN_NAME                              | PLUGIN_LIBRARY        | PLUGIN_STATUS | LOAD_OPTION | 
  8. +------------------------------------------+-----------------------+---------------+-------------+ 
  9. | CONNECTION_CONTROL                       | connection_control.so | ACTIVE        | FORCE       | 
  10. | CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS | connection_control.so | ACTIVE        | FORCE       | 
  11. +------------------------------------------+-----------------------+---------------+-------------+ 
  12. rows in set (0.00 sec) 
  13.   
  14. mysql>  

設置系統(tǒng)變量

  1. mysql> show variables like 'connection_control%'
  2. +-------------------------------------------------+------------+ 
  3. | Variable_name                                   | Value      | 
  4. +-------------------------------------------------+------------+ 
  5. | connection_control_failed_connections_threshold | 3          | 
  6. | connection_control_max_connection_delay         | 2147483647 | 
  7. | connection_control_min_connection_delay         | 1000       | 
  8. +-------------------------------------------------+------------+ 
  • connection_control_failed_connections_threshold #登陸失敗次數(shù)限制,默認值為3
  • connection_control_max_connection_delay #限制重試時間最大值,單位為毫秒( milliseconds),默認值2147483647
  • connection_control_min_connection_delay #限制重試時間最小值,單位為毫秒( milliseconds),默認值為1000毫秒,也就是1秒

注意事項:

1:connection_control_min_connection_delay的值必須小于connection_control_max_connection_delay,connection_control_max_connection_delay不能小于connection_control_min_connection_delay的值。

  1. mysql> set global connection_control_min_connection_delay=60000; 
  2.  
  3. Query OK, 0 rows affected (0.00 sec) 

注意,命令方式設置全局系統(tǒng)變量在服務器重啟后丟失,所以最好的方式在參數(shù)文件my.cnf設置全局系統(tǒng)變量

-- 配置文件增加以下配置

  1. [mysqld]  
  2.   
  3. plugin-load-add = connection_control.so          #不是必須 
  4.   
  5. connection-control = FORCE                       #不是必須 
  6.   
  7. connection-control-failed-login-attempts = FORCE #不是必須 
  8.   
  9. connection_control_min_connection_delay = 60000  
  10.   
  11. connection_control_max_connection_delay = 1800000  
  12.   
  13. connection_control_failed_connections_threshold = 3 

三次連續(xù)輸錯密碼后,就會在第四次輸入密碼后掛起

  1. [root@lnx02 ~]# mysql -h 10.20.57.24 -u test -p 
  2. Enter password:  
  3. ERROR 1045 (28000): Access denied for user 'test'@'192.168.27.180' (using password: YES) 
  4. [root@lnx02 ~]# mysql -h 10.20.57.24 -u test -p 
  5. Enter password:  
  6. ERROR 1045 (28000): Access denied for user 'test'@'192.168.27.180' (using password: YES) 
  7. [root@lnx02 ~]# mysql -h 10.20.57.24 -u test -p 
  8. Enter password:  
  9. ERROR 1045 (28000): Access denied for user 'test'@'192.168.27.180' (using password: YES) 
  10. [root@lnx02 ~]# mysql -h 10.20.57.24 -u test -p 
  11. Enter password:  

注意,MySQL服務重啟過后,INFORMATION_SCHEMA.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS中的數(shù)據(jù)全部前空。

  • The CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS plugin must be activated for this table to be available, and the CONNECTION_CONTROL plugin must be activated or the table contents will always be empty. See Section 6.4.2, “The Connection-Control Plugins”.

必須激活CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS插件才能使用該表CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS,并且要么激活CONNECTION_CONTROL插件,要么該表的內容始終為空。請參見第6.4.2節(jié)“連接控制插件”。

  • The table contains rows only for clients that have had one or more consecutive failed connection attempts without a subsequent successful attempt. When a client connects successfully, its failed-connection count is reset to zero and the server removes any row corresponding to the client.

該表僅包含已進行一次或多次連續(xù)失敗連接嘗試而沒有隨后成功嘗試的客戶端的行。當客戶端成功連接時,其失敗連接計數(shù)將重置為零,并且服務器將刪除與該客戶端對應的任何行。

  • Assigning a value to the connection_control_failed_connections_threshold system variable at runtime resets all accumulated failed-connection counters to zero, which causes the table to become empty.

在運行時為connection_control_failed_connections_threshold系統(tǒng)變量分配一個值會將所有累積的失敗連接計數(shù)器重置為零,這將導致表變空。

解除賬號延遲響應限制

方法1:重啟MySQL實例

方法2:調整系統(tǒng)變量connection_control_failed_connections_threshold的值。

  1. mysql> SELECT * FROM  
  2.     -> INFORMATION_SCHEMA.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS; 
  3. +-------------------+-----------------+ 
  4. | USERHOST          | FAILED_ATTEMPTS | 
  5. +-------------------+-----------------+ 
  6. 'test'@'192.168%' |               5 | 
  7. +-------------------+-----------------+ 
  8. 1 row in set (0.00 sec) 
  9.   
  10.   
  11. mysql>  
  12. mysql> set global connection_control_failed_connections_threshold=2; 
  13. Query OK, 0 rows affected (0.00 sec) 
  14.   
  15. mysql> SELECT * FROM  
  16.     -> INFORMATION_SCHEMA.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS; 
  17. Empty set (0.00 sec) 

3:卸載插件plugin

  1. mysql> UNINSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS; 
  2.  
  3. mysql> UNINSTALL PLUGIN CONNECTION_CONTROL; 

注意事項:

關于Connection-Control的實現(xiàn)原理,淘寶數(shù)據(jù)庫內核月報有篇文章分析過代碼,介紹過實現(xiàn)原理,Connection-Control插件雖然可以防止惡意暴力破解MySQL賬戶,但是可能會浪費MySQL的資源;

  • 比如如果短時間內有大量的惡意攻擊,該插件雖然可以防止破解MySQL賬戶,但是會消耗主機資源(每一個連接創(chuàng)建一個線程);
  • 如果這里使用了線程池,雖然可以避免消耗主機資源,但是等線程池中的線程被消耗光,再有新連接來就會拒絕服務。

參考資料:

https://dev.mysql.com/doc/refman/5.7/en/connection-control-installation.html

https://dev.mysql.com/doc/refman/5.7/en/connection-control-failed-login-attempts-table.html

https://dev.mysql.com/doc/refman/5.7/en/connection-control-variables.html

 

責任編輯:武曉燕 來源: DBA閑思雜想錄
相關推薦

2011-08-23 13:56:12

MySQLConnection

2011-05-16 09:27:10

MySQLNoSQL

2011-12-20 15:34:55

PhoneGap APConnection

2021-09-10 06:46:00

MySQL連接控制

2012-03-21 21:22:24

移動應用

2009-12-29 15:38:17

silverlight

2009-07-06 17:36:06

ResultSetJDBC Connec

2011-12-30 14:05:17

PhoneGap APConnection視頻

2009-08-19 17:12:18

C# Connecti

2009-10-10 16:40:37

VB.NET Cont

2009-07-23 16:16:59

ASP.net Con

2024-07-09 10:42:30

2021-09-08 19:35:02

MySQL Keyring加密

2015-09-16 13:11:52

Http網(wǎng)絡協(xié)議Proxy-Conne

2009-11-11 09:11:19

2011-07-19 16:36:25

Audit插件MySQL數(shù)據(jù)庫

2009-12-24 16:46:42

ADO Connect

2009-12-24 16:40:59

Ado Connect

2018-09-27 11:05:40

修復Windows 10Err_Connect

2012-05-15 19:13:40

Insight Con
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 青青草综合 | 中文字幕不卡在线观看 | 91精品国产一区二区在线观看 | 亚洲三区在线观看 | 国产a区 | 亚洲高清在线观看 | 69xxx免费| 久久精品1 | 国产精品一区二区欧美 | 伊人网99 | 91看片在线| 欧美久久天堂 | 亚洲精品在线播放 | 99只有精品| 久久久久久毛片免费观看 | 日本精品在线一区 | 欧美一区二区在线观看 | 欧美性视频在线播放 | 二区在线视频 | 青青艹在线视频 | 国产精品一区三区 | 国产精品久久久久久久7电影 | 在线观看亚洲一区二区 | 亚洲成人免费在线 | 激情欧美一区二区三区中文字幕 | 欧美一区二区三区,视频 | 青青久久久 | 国产一级在线观看 | 日韩高清一区 | 亚洲嫩草| 91免费在线视频 | 亚洲精品在线视频 | 999精品视频 | 三级黄色大片网站 | 亚洲国产精品一区二区三区 | 成人精品一区二区 | 天堂va在线观看 | 亚洲成人精品在线 | 欧洲在线视频 | 欧美二区在线 | 日韩第一页 |