Spec-Zone.ru › MySQL 5.7

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_SCHEMA CONNECTION_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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/connection-control-installation.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API