Рейтинг:2

Может ли несанкционированная попытка входа в систему занять соединение MySQL в течение длительного времени?

флаг in

Мой MySQL имеет ограниченное количество одновременных подключений, определенных параметром max_connections переменная моего облачного провайдера. В настоящее время ограничено 151 соединения.

Существует только один веб-сервер, использующий эту базу данных, поэтому ее должно быть более чем достаточно. Однако я был удивлен, увидев, что в настоящее время у меня более 30 активных подключений к моему серверу:

mysql> показать статус, где `variable_name` = 'Threads_connected';
+-------------------+-------+
| Имя_переменной | Значение |
+-------------------+-------+
| Threads_connected | 34 |
+-------------------+-------+

Хотя на данный момент его почти ничего не должно использовать, и я могу проверить это с помощью show processlist: (здесь только одно соединение)

mysql> показать список процессов;
+--------+-------------+------+------ ------+---------+------+-----------+--------------- ---+-----------+----------------+
| Идентификатор | Пользователь | Хост | дб | Команда | Время | состояние | Информация | Rows_sent | Ряды_исследованные |
+--------+-------------+------+------ ------+---------+------+-----------+--------------- ---+-----------+----------------+
| 272130 | ********** | ****************** | ********** | Запрос | 0 | запуск | показать список процессов | 0 | 0 |
+--------+-------------+------+------ ------+---------+------+-----------+--------------- ---+-----------+----------------+

Я изо всех сил пытался объяснить местонахождение оставшихся 33 соединений, и, наконец, я понял: могут ли это быть массовые атаки грубой силы? Может быть, 30-40 хакеров пытаются угадать мой пароль, и это блокирует поток на каждого злоумышленника?

Верно ли мое предположение?

ОБНОВЛЕНИЕ 2021-07-07: добавлены дополнительные сведения о статусе MySQL.

mysql> показать статус, где `имя_переменной`, например '%threads%', или `имя_переменной`, например '%connection%';
+-----------------------------------+-------------- --------+
| Имя_переменной | Значение |
+-----------------------------------+-------------- --------+
| Connection_errors_accept | 0 |
| Connection_errors_internal | 0 |
| Connection_errors_max_connections | 0 |
| Connection_errors_peer_address | 8 |
| Connection_errors_select | 0 |
| Connection_errors_tcpwrap | 0 |
| Соединения | 482365 |
| Delayed_insert_threads | 0 |
| Max_used_connections | 74 |
| Max_used_connections_time | 2021-07-05 09:10:27 |
| Slow_launch_threads | 0 |
| Threadpool_idle_threads | 0 |
| Threadpool_threads | 0 |
| Threads_cached | 5 |
| Threads_connected | 36 |
| Threads_created | 2882 ​​|
| Threads_running | 1 |
+-----------------------------------+-------------- --------+
флаг in
Если соединения назначены вашей учетной записи, аутентификация на уровне MySQL уже была пройдена, поэтому перебор учетной записи не имеет смысла. Основываясь на вашем описании, я бы предположил, что все подключенные потоки принадлежат одному серверному процессу.
adamsfamily avatar
флаг in
На самом деле я не уверен, что соединения уже назначены моей учетной записи. Мне интересно, как я могу понять это? Кстати, это «общая» служба базы данных MySQL от Arubacloud, поэтому другие пользователи могут находиться на одном сервере.Возможно ли, что я вижу другие аутентифицированные соединения в `Threads_connected`, которые принадлежат другим пользователям? (Я не думаю, что это будут соединения с моего сервера, потому что даже если на сервере нет трафика, соединения все еще активны - 12 часов спустя)
флаг in
Предполагая, что веб-сайт не имеет решающего значения, есть одна простая мера, чтобы увидеть, исходит ли соединение с вашего веб-сервера: остановите веб-сервер и перепроверьте соединения. В качестве альтернативы, если веб-сервер не используется совместно, вы можете посмотреть TCP-соединения между веб-сервером и сервером mysql. Каждое соединение с базой данных всегда имеет одно соединение TCP (при условии, что соединение MYSQL использует TCP).
adamsfamily avatar
флаг in
Попробовал, закрыл веб-сайт, а соединения все еще между 33-38. Я думаю, что это должно быть либо 1) другие пользователи сервера MySQL, которых я не вижу с помощью `show processlist`, либо 2) неаутентифицированные пользователи - однако я не могу это доказать...
Рейтинг:1
флаг ua
  • ПОКАЗАТЬ СПИСОК ПРОЦЕССОВ показывает только подключения для пользователя, выполняющего эту команду. Обязательно подключитесь как корень чтобы получить полный список. «root» на самом деле мощнее, чем вам нужно; может быть какой-то другой пользователь («администратор»?), который достаточно силен. С точки зрения ГРАНТ, все, что нужно «пользователю», это ПРОЦЕСС.

  • Как только вы получите список процессов, Время укажет, сколько секунд с момента подключения.

  • ПОКАЗАТЬ СТАТУС, КАК 'Threads_running'; покажет, сколько подключений в настоящее время активно.

  • ПОКАЗАТЬ СТАТУС, КАК 'Max_used_connections'; является высшей точкой воды. Если еще не попал max_connections (вы упомянули 151), то у вас еще не (с момента перезапуска) "исчерпаны соединения".

  • Тайм-аут может быть большим, что приводит к зависанию соединений.

adamsfamily avatar
флаг in
Спасибо, Рик, к сожалению, я не могу войти в систему как `root`, так как провайдер управляемой базы данных не позволяет мне. Однако я вошел в систему под единственной учетной записью пользователя, которая у меня есть, поэтому я должен, по крайней мере, видеть свои собственные подключения. Я обновил вопрос с более подробным выводом. «Высокий водяной знак» отличный, очень хороший показатель, спасибо!
флаг ua
@adamsfamily - я добавил к своему первому пункту списка.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.