Увійдіть до спроб входу в MySQL


25

Час від часу на нашому сервері виробництва MySQL не вдається спроби входу в систему (інформаційна панель MySQL попереджає нас). Чи є спосіб зареєструвати кожен успішний і невдалий вхід на сервер MySQL без включення general_log?

Ми вважаємо, що general_logце не варіант, оскільки це виробничий сервер з високим навантаженням.


1
Подумайте про використання плагіна MariaDB Audit 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

просто щоб повідомити допитливому: копайте у своєму журналі помилок та престо!

(1). редагувати my.cnf ( тут знайдено документацію щодо налаштувань )

[mysqld]

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

log_error = / var / log / mysql / помилка

: #defaults to 1. Якщо значення> 1, перервані з’єднання та заборонені доступом помилки для нових спроб з'єднання записуються в журнал помилок

log_warnings = 2

...

(2). при виконанні команди

$ sudo cat /var/log/mysql/error.err | egrep '[aA] ccess відмовлено'

(3). і у вас є!

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

mysql> ВИКОРИСТАННЯ ВИКОРИСТАННЯ *. * ДО 'зловмисника' @ 'localhost' З 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 може призвести до незначного покарання за продуктивність. Це рішення також запише менше даних, ніж загальний журнал запитів.

Я сам цього не використовував, але це звучить дуже корисно.


Звучить добре, але посилання для мене не працює.
CarlosH

Посилання працює для мене сьогодні вранці, використовуючи Firefox. mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging
Stefan Lasiewski

І мені було б цікаво почути ваш досвід з цим.
Стефан Ласевський
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.