6.4.2.1 Установка плагина управления подключениями
В этом разделе описывается, как установить плагины управления подключениями, CONNECTION_CONTROL и CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS. Дополнительную информацию об установке плагинов см. в разделе 5.5.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 (см. раздел 5.5.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 GLOBAL connection_control_failed_connections_threshold = 4;
SET GLOBAL connection_control_min_connection_delay = 1500;
SET
GLOBAL устанавливает значение для работающего экземпляра MySQL. Чтобы сделать изменение постоянным, добавьте строку в свой файл конфигурации my.cnf, как показано ранее.
Системные переменные 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(см. Раздел 6.2.14, «Прокси-пользователи»).Если клиентский пользователь не проксирует другого пользователя, но соответствует записи
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.