Журнал попыток входа в MySQL


25

Время от времени происходят неудачные попытки входа в систему на нашем производственном сервере MySQL (панель управления MySQL предупреждает нас). Есть ли способ регистрировать каждый успешный и неудачный вход на сервер MySQL без включения general_log?

Мы думаем, что general_logэто не вариант, потому что это рабочий сервер с высокой нагрузкой.


1
Рассмотрите возможность использования MariaDB аудита плагин mariadb.com/resources/blog/... mariadb.com/kb/en/mariadb/about-the-mariadb-audit-plugin
Mersh

По словам чиновника mysql: это есть As of MySQL 5.5.28, MySQL Enterprise Edition includes MySQL Enterprise Audit, implemented using a server plugin named audit_log. только у предприимчивой версии.
Тийна

Ответы:


20

просто чтобы сообщить любопытному: копайся в своем журнале ошибок и presto!

(1). отредактируйте my.cnf (документация по настройкам находится здесь )

[ТуздЫ]

: # Введите имя для файла журнала ошибок. В противном случае будет использоваться имя по умолчанию.

log_error = / var / log / mysql / error

: #defaults to 1. Если значение> 1, прерванные соединения и ошибки, в которых отказано в доступе для новых попыток соединения, записываются в журнал ошибок.

log_warnings = 2

...

(2). при командном заезде

$ sudo cat /var/log/mysql/error.err | egrep '[aA] отказано в доступе'

(3). и у тебя это есть!

(4). если вам нужно ограничить пользователя (атака dos или попытка восстановления пароля пользователя mysql в многопользовательской базе данных), тогда ( http://dev.mysql.com/doc/refman/5.5/en/user-resources.html )

mysql> GRANT USAGE ON *. * «Атакующему» @ «localhost» WITH MAX_CONNECTIONS_PER_HOUR 100;

ограничить только 100 попыток восстановления пароля в час.


2

Я думаю, что общий журнал может регистрировать все попытки входа в систему (успех и неудача) среди множества других вещей. Основная проблема заключается в том, что общий журнал будет влиять на производительность вашей базы данных. Вы можете включить общий журнал с запросом

SET GLOBAL general_log = 'on'

для более новых версий MySQL.


Это временно или постоянно ?, если это временно, это означает, что мне нужно изменить /etc/mysql/my.cnfMySQL?
DarckBlezzer

Это временно. Этот подход может работать, или вы можете добавить --general-logк флагам при запуске MySQL.
rmc00

1

Привет, я не думаю, что это возможно.

Начиная с mysql 5.1.29 - вы можете указать опцию хранения (таблица или файл) и местоположение, а также какой журнал вы хотите - ошибка, общий, двоичный или медленный запрос. Насколько я знаю - вы не можете указать формат журнала или что регистрируется. Я могу ошибаться - но я думаю, что все попытки входа будут регистрироваться в общем журнале, а не в ошибке.

Однако, предполагая, что ваш сервер MySQL работает на отдельной машине, от вашего сервера приложений, и вам нужен открытый порт 3306 (или любой другой), и вы не можете использовать туннель SSH, ваш сервер MySQL все равно не должен быть доступен любому желающему. неволей. Я настоятельно рекомендую не подвергать его веб-трафику, и если вы должны (как в случае проживания где-то не за брандмауэром) привязать его к ip-адресу или ip-блоку вашего сервера приложений и вашему ip доступа администратора (где вы находитесь) доступ из)

Надеюсь, это поможет.


1

Можно войти connectи quitкоманды с помощью MySQL-Audit-плагин.

  1. Найдите правильную версию из выпуска mysql-audit-plugin , я использовал mysql 5.7, поэтому я использовал audit-plugin-percona-5.7-1.1.7-805-linux-x86_64.zip.
  2. переместите загруженный soфайл в место, указанное mysqladmin variables | grep plugin_dir.
  3. mysql>install plugin audit soname 'libaudit_plugin.so'
  4. включив функцию журнала mysql>set global audit_json_file=ON, по умолчанию она регистрирует все успешные операции. установив set global audit_record_cmds='quit,connect'его, логи подключаются и выходят, я полагаю, в соответствии с конфигурацией mysql-audit-plugin .

Вот как это выглядит в файле для входа и выхода из системы:

{"msg-type":"activity","date":"1543740612328","thread-id":"1015112","query-id":"3045222","user":"root","priv_user":"skip-grants user","ip":"172.28.15.10","host":"172.28.15.10","connect_attrs":{"_os":"Linux","_client_name":"libmysql","_pid":"11575","_client_version":"5.6.40","_platform":"x86_64","program_name":"mysql"},"cmd":"Quit","query":"Quit"} 

{"msg-type":"activity","date":"1543740724627","thread-id":"1015113","query-id":"0","user":"root","priv_user":"skip-grants user","ip":"172.28.15.10","host":"172.28.15.10","connect_attrs":{"_os":"Linux","_client_name":"libmysql","_pid":"11863","_client_version":"5.6.40","_platform":"x86_64","program_name":"mysql"},"cmd":"Connect","query":"Connect"}
{"msg-type":"activity","date":"1543740724629","thread-id":"1015113","query-id":"3045223","user":"root","priv_user":"skip-grants user","ip":"172.28.15.10","host":"172.28.15.10","connect_attrs":{"_os":"Linux","_client_name":"libmysql","_pid":"11863","_client_version":"5.6.40","_platform":"x86_64","program_name":"mysql"},"rows":"1","status":"0","cmd":"select","query":"select @@version_comment limit 1"}

0

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

если сервер каким-то образом подвергается внешним соединениям на 3306, если это не является преднамеренным и необходимым, я бы установил конфигурацию, как сказал Ник, а также рассмотрю использование iptables для ограничения трафика до 3306 только с серверов вашего приложения.


MySQL автоматически запрещает подключения с IP-адреса, которые не имеют хотя бы одной подходящей строки в mysql.user
David M

0

На http://www.mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging/ автор показывает метод захвата пакетов с использованием tcpdump и фильтрации выходных данных на основе строки.

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

Я не использовал это сам, но это звучит очень полезно.


Звучит хорошо, но ссылка не работает для меня.
Карлос

Ссылка работает для меня сегодня утром, используя Firefox. mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging
Стефан Ласевский

И мне было бы интересно услышать ваш опыт с этим.
Стефан Ласевский
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.