8.4.2.1 Установка плагина управления подключениями
В этом разделе описывается, как установить плагины управления подключениями, CONNECTION_CONTROL и CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS. Для общей информации об установке плагинов см. раздел 7.6.1 «Установка и удаление плагинов».
Для использования сервером, библиотечный файл плагина должен быть расположен в каталоге плагинов MySQL (каталог, указанный системной переменной plugin_dir). При необходимости, настройте расположение каталога плагинов, установив значение plugin_dir при запуске сервера.
Базовое имя библиотечного файла плагина — connection_control. Суффикс имени файла отличается в зависимости от платформы (например, .so для Unix и Unix-подобных систем, .dll для Windows).
Чтобы загрузить плагины при запуске сервера, используйте параметр --plugin-load-add для указания имени библиотечного файла, содержащего плагины. При использовании этого метода загрузки плагинов, параметр должен быть указан каждый раз при запуске сервера. Например, поместите эти строки в файл сервера my.cnf, настроив суффикс .so для вашей платформы, если необходимо:
[mysqld]
plugin-load-add=connection_control.so
После изменения my.cnf перезапустите сервер, чтобы новые настройки вступили в силу.
В качестве альтернативы, чтобы загрузить плагины во время выполнения, используйте эти операторы, настроив суффикс .so для вашей платформы по необходимости:
INSTALL PLUGIN CONNECTION_CONTROL
SONAME 'connection_control.so';
INSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS
SONAME 'connection_control.so';
INSTALL PLUGIN загружает плагин немедленно и регистрирует его в таблице системной базы данных mysql.plugins, чтобы заставить сервер загрузить его при каждом последующем нормальном запуске без необходимости использовать --plugin-load-add.
Для проверки установки плагинов, просмотрите таблицу Информационной схемы PLUGINS или используйте оператор SHOW PLUGINS (см. раздел 7.6.2 «Получение информации о плагинах сервера»). Например:
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 |
+------------------------------------------+---------------+
Если плагин не удаётся инициализировать, проверьте журнал ошибок сервера на наличие диагностических сообщений.
Если плагины были предварительно зарегистрированы с помощью INSTALL PLUGIN или загружаются с помощью --plugin-load-add, вы можете использовать параметры --connection-control и --connection-control-failed-login-attempts при запуске сервера для управления активацией плагинов. Например, чтобы загрузить плагины при запуске и предотвратить их удаление во время выполнения, используйте эти параметры:
[mysqld]
plugin-load-add=connection_control.so
connection-control=FORCE_PLUS_PERMANENT
connection-control-failed-login-attempts=FORCE_PLUS_PERMANENT
Если требуется предотвратить запуск сервера без указанного плагина управления подключениями, используйте значение параметра FORCE или FORCE_PLUS_PERMANENT, чтобы принудительно завершить запуск сервера, если плагин не был успешно инициализирован.
Возможна установка одного плагина без другого, но для полной функциональности управления подключениями оба плагина должны быть установлены. В частности, установка только плагина CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS мало полезна, так как без плагина CONNECTION_CONTROL, предоставляющего данные, которые заполняют таблицу CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS, таблица всегда пуста.
Настройка задержки подключения
Для возможности настройки своего функционирования плагин CONNECTION_CONTROL предоставляет эти системные переменные:
connection_control_failed_connections_threshold: Количество последовательных неудачных попыток подключения, разрешённых для учётных записей до того, как сервер добавит задержку для последующих попыток подключения. Для отключения подсчёта неудачных подключений установитеconnection_control_failed_connections_thresholdв ноль.connection_control_min_connection_delay: Минимальная задержка в миллисекундах для неудачных подключений, превышающих порог.connection_control_max_connection_delay: Максимальная задержка в миллисекундах для неудачных подключений, превышающих порог.
Если connection_control_failed_connections_threshold не равно нулю, подсчёт неудачных подключений включён и имеет следующие свойства:
Задержка равна нулю до
connection_control_failed_connections_thresholdпоследовательных неудачных попыток подключения.В дальнейшем сервер добавляет увеличивающуюся задержку для последующих последовательных попыток, пока не произойдёт успешное подключение. Первоначальные нескорректированные задержки начинаются с 1000 миллисекунд (1 секунда) и увеличиваются на 1000 миллисекунд за каждую попытку. То есть, как только задержка активирована для учётной записи, нескорректированные задержки для последующих неудачных попыток составляют 1000 миллисекунд, 2000 миллисекунд, 3000 миллисекунд и так далее.
Фактическая задержка, испытываемая клиентом, — это нескорректированная задержка, скорректированная в пределах значений системных переменных
connection_control_min_connection_delayиconnection_control_max_connection_delayвключительно.После того, как задержка была активирована для учётной записи, первое успешное подключение после этого также испытывает задержку, но подсчёт неудач сбрасывается для последующих подключений.
Например, при стандартном значении connection_control_failed_connections_threshold — 3, задержка отсутствует для первых трёх последовательных неудачных попыток подключения учётной записью. Фактические скорректированные задержки, испытываемые учётной записью для четвёртой и последующих неудачных подключений, зависят от значений connection_control_min_connection_delay и connection_control_max_connection_delay:
Если
connection_control_min_connection_delayиconnection_control_max_connection_delayравны 1000 и 20000, скорректированные задержки совпадают с нескорректированными задержками, но не более 20000 миллисекунд. Четвёртая и последующие неудачные подключения задерживаются на 1000 миллисекунд, 2000 миллисекунд, 3000 миллисекунд и так далее.Если
connection_control_min_connection_delayиconnection_control_max_connection_delayравны 1500 и 20000, скорректированные задержки для четвёртой и последующих неудачных подключений составляют 1500 миллисекунд, 2000 миллисекунд, 3000 миллисекунд и так далее, не превышая 20000 миллисекунд.Если
connection_control_min_connection_delayиconnection_control_max_connection_delayравны 2000 и 3000, скорректированные задержки для четвёртой и последующих неудачных подключений составляют 2000 миллисекунд, 2000 миллисекунд и 3000 миллисекунд, при этом все последующие неудачные подключения также задерживаются на 3000 миллисекунд.
Вы можете установить системные переменные CONNECTION_CONTROL во время запуска или выполнения сервера. Предположим, что вы хотите разрешить четыре последовательные неудачные попытки подключения, прежде чем сервер начнёт задерживать свои ответы, с минимальной задержкой в 2000 миллисекунд. Чтобы установить соответствующие переменные во время запуска сервера, поместите эти строки в файл конфигурации сервера my.cnf:
[mysqld]
plugin-load-add=connection_control.so
connection_control_failed_connections_threshold=4
connection_control_min_connection_delay=2000
Чтобы установить и сохранить переменные во время выполнения, используйте эти инструкции:
SET PERSIST connection_control_failed_connections_threshold = 4;
SET PERSIST connection_control_min_connection_delay = 2000;
SET
PERSIST устанавливает значение для работающего экземпляра MySQL. Оно также сохраняет значение, что позволяет ему сохраняться при последующих перезапусках сервера. Чтобы изменить значение для работающего экземпляра MySQL без сохранения его при последующих перезапусках, используйте ключевое слово GLOBAL вместо PERSIST. См. Раздел 15.7.6.1, «Синтаксис SET для присваивания переменных».
Системные переменные connection_control_min_connection_delay и connection_control_max_connection_delay имеют минимальное и максимальное значения 1000 и 2147483647 соответственно. Кроме того, допустимый диапазон значений каждой переменной также зависит от текущего значения другой:
connection_control_min_connection_delayне может быть больше текущего значенияconnection_control_max_connection_delay.connection_control_max_connection_delayне может быть меньше текущего значенияconnection_control_min_connection_delay.
Таким образом, для внесения изменений, необходимых для некоторых конфигураций, вам может потребоваться установить переменные в определённом порядке. Предположим, что текущая минимальная и максимальная задержки составляют 1000 и 2000, и вы хотите установить их в 3000 и 5000. Вы не можете сначала установить connection_control_min_connection_delay в 3000, потому что это больше текущего значения connection_control_max_connection_delay — 2000. Вместо этого установите connection_control_max_connection_delay в 5000, а затем установите connection_control_min_connection_delay в 3000.
Оценка сбоев подключения
При установке плагина CONNECTION_CONTROL, он проверяет попытки подключения и отслеживает, завершаются ли они успешно или с ошибкой. В этом контексте неудачная попытка подключения - это попытка, при которой имя клиента и хоста соответствуют известному аккаунту MySQL, но предоставленные учетные данные неверны или не соответствуют ни одному из известных аккаунтов.
Подсчёт неудачных подключений основан на комбинации имя пользователя/хост для каждой попытки подключения. Определение соответствующего имени пользователя и имени хоста учитывает проксирование и происходит следующим образом:
Если пользователь клиента проксирует другого пользователя, учётным данными для подсчёта неудачных подключений является пользователь, выполняющий проксирование, а не проксируемый пользователь. Например, если
external_user@example.comпроксируетproxy_user@example.com, подсчёт подключений использует проксирующего пользователя,external_user@example.com, а не проксируемого пользователя,proxy_user@example.com. Иexternal_user@example.com, иproxy_user@example.comдолжны иметь действительные записи в таблице системыmysql.user, и между ними должна быть определена связь проксирования в таблице системыmysql.proxies_priv(см. раздел 8.2.19, «Прокси-пользователи»).Если пользователь клиента не проксирует другого пользователя, но соответствует записи
mysql.user, подсчёт использует значениеCURRENT_USER(), соответствующее этой записи. Например, если пользовательuser1подключается с хостаhost1.example.comи соответствует записиuser1@host1.example.com, подсчёт используетuser1@host1.example.com. Если пользователь соответствует записиuser1@%.example.com,user1@%.comилиuser1@%, подсчёт использует соответственноuser1@%.example.com,user1@%.comилиuser1@%.
В описанных случаях попытка подключения соответствует какой-либо записи mysql.user, и успех или неудача запроса зависят от того, предоставляет ли клиент правильные учетные данные аутентификации. Например, если клиент предоставляет неправильный пароль, попытка подключения завершается неудачно.
Если попытка подключения не соответствует никакой записи mysql.user, попытка завершается неудачно. В этом случае значение CURRENT_USER() недоступно, и подсчёт неудачных подключений использует имя пользователя, предоставленное клиентом, и хост клиента, определённый сервером. Например, если клиент пытается подключиться как пользователь user2 с хоста host2.example.com, имя пользователя доступно в запросе клиента, а сервер определяет информацию о хосте. Комбинация имя пользователя/хост, используемая для подсчёта, - это user2@host2.example.com.
Сервер хранит информацию о том, с каких клиентских хостов могут подключаться к серверу (по сути, объединение значений хостов для записей mysql.user). Если клиент пытается подключиться с любого другого хоста, сервер отклоняет попытку на ранней стадии настройки соединения:
ERROR 1130 (HY000): Host 'host_name' is not
allowed to connect to this MySQL server
Поскольку этот тип отклонения происходит так рано, CONNECTION_CONTROL не видит его и не учитывает.
Мониторинг сбоев подключения
Для мониторинга неудачных подключений используйте эти источники информации:
Переменная состояния
Connection_control_delay_generatedуказывает количество раз, когда сервер добавил задержку в свой ответ на неудачную попытку подключения. Это не учитывает попытки, которые произошли до достижения порога, определённого системной переменнойconnection_control_failed_connections_threshold.Таблица
INFORMATION_SCHEMACONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTSпредоставляет информацию о текущем количестве последовательных неудачных попыток подключения на аккаунт (комбинация имя пользователя/хост). Это учитывает все неудачные попытки, независимо от того, были ли они замедлены.
Назначение значения переменной connection_control_failed_connections_threshold во время выполнения имеет эти эффекты:
Все накопленные счётчики неудачных подключений сбрасываются до нуля.
Переменная состояния
Connection_control_delay_generatedсбрасывается до нуля.Таблица
CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTSстановится пустой.
© 2025 Oracle
Licensed under the GPLv2 License.