Spec-Zone.ru › MySQL 9.2

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_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-9.2-en/connection-control-installation.html

Spec-Zone.ru

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