Loguj próby logowania do MySQL

25

Od czasu do czasu na naszym serwerze produkcyjnym MySQL nie powiodły się próby logowania (ostrzega nas pulpit MySQL). Czy istnieje sposób na rejestrowanie każdego udanego i nieudanego logowania na serwerze MySQL bez włączenia general_log?

Uważamy, że general_lognie jest to możliwe, ponieważ jest to serwer produkcyjny o dużym obciążeniu.

CarlosH
źródło
1
Zastanów się nad użyciem wtyczki MariaDB Audit mariadb.com/resources/blog/… mariadb.com/kb/en/mariadb/about-the-mariadb-audit-plugin
Mersh
Według oficjalnego mysql: As of MySQL 5.5.28, MySQL Enterprise Edition includes MySQL Enterprise Audit, implemented using a server plugin named audit_log. ma go tylko wersja przedsiębiorcza.
Tiina,

Odpowiedzi:

20

tylko po to, by poinformować ciekawskiego: wejdź do dziennika błędów i presto!

(1). edytuj my.cnf (dokumentacja ustawień znajduje się tutaj )

[mysqld]

: # Wprowadź nazwę pliku dziennika błędów. W przeciwnym razie zostanie użyta nazwa domyślna.

log_error = / var / log / mysql / error

: #defaults do 1. Jeśli wartość wynosi> 1, przerwane połączenia i błędy odmowy dostępu dla nowych prób połączenia są zapisywane w dzienniku błędów

log_warnings = 2

...

(2). przy uruchomieniu polecenia

$ sudo cat /var/log/mysql/error.err | egrep „[aA] cenie odmowa”

(3). i masz to!

(4). jeśli chcesz ograniczyć użytkownika (próba ataku lub próba odzyskania hasła użytkownika mysql w bazie danych dla wielu użytkowników), to ( http://dev.mysql.com/doc/refman/5.5/en/user-resources.html )

mysql> UŻYTKOWANIE DOTACJI NA *. * DO „atakującego” @ „localhost” Z MAX_CONNECTIONS_PER_HOUR 100;

ograniczyć tylko 100 prób odzyskania hasła na godzinę.

centurian
źródło
2

Myślę, że ogólny dziennik może rejestrować wszystkie próby logowania (sukces i porażka) wśród wielu innych rzeczy. Główny problem polega na tym, że ogólny dziennik wpłynie na wydajność bazy danych. Możesz włączyć dziennik ogólny za pomocą zapytania

SET GLOBAL general_log = 'on'

dla nowszych wersji MySQL.

rmc00
źródło
Czy jest to tymczasowe czy stałe ?, jeśli jest tymczasowe, co oznacza, że ​​muszę zmodyfikować /etc/mysql/my.cnfmysql?
DarckBlezzer,
To jest tymczasowe. Takie podejście może zadziałać lub możesz dodać --general-logdo flag po uruchomieniu MySQL.
rmc00
1

Cześć, nie sądzę, że to możliwe.

Począwszy od mysql 5.1.29 - możesz określić opcję przechowywania (tabela lub plik) i lokalizację oraz żądany dziennik - błąd, zapytanie ogólne, binarne lub wolne. O ile mi wiadomo - nie można określić formatu dziennika ani tego, co zostanie zarejestrowane. Mogę się mylić - ale myślę, że wszystkie próby logowania zostaną zarejestrowane w dzienniku ogólnym, a nie w błędzie.

Jednak zakładając, że twój serwer mysql działa na osobnej maszynie, od twojego serwera applicaiton, i potrzebujesz portu 3306 (lub cokolwiek) otwartego i nie możesz używać tunelu ssh, twój serwer mysql nadal nie powinien być dostępny dla nikogo - nilly. Zdecydowanie odradzam narażanie go na ruch sieciowy, a jeśli musisz (tak jak w przypadku rezydowania gdzieś poza zaporą ogniową), powiąż go z adresem IP lub blokiem ip twojego serwera aplikacji i twojego adresu dostępu administratora (gdzie jesteś dostęp z)

Mam nadzieję, że to pomaga.

konung
źródło
1

Można zalogować się connecti quitkomendować za pomocą wtyczki mysql-audit-plug-in.

  1. Znajdź odpowiednią wersję z wydania wtyczki mysql-audit-plugin , użyłem mysql 5.7, więc użyłem audit-plugin-percona-5.7-1.1.7-805-linux-x86_64.zip.
  2. przenieś pobrany soplik w miejsce wskazane przez mysqladmin variables | grep plugin_dir.
  3. mysql>install plugin audit soname 'libaudit_plugin.so'
  4. włączenie funkcji dziennika, mysql>set global audit_json_file=ONdomyślnie rejestruje wszystkie udane operacje. po ustawieniu set global audit_record_cmds='quit,connect'rejestruje tylko połączenia i wychodzi, jak sądzę, zgodnie z konfiguracją wtyczki mysql-audit-plugin .

Tak wygląda plik do logowania i wylogowania:

{"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"}
Tiina
źródło
0

jeśli serwer, o którym mowa, nie powinien mieć skonfigurowanych połączeń zewnętrznych, martwiłbym się jakimś atakiem na Twój serwer aplikacji, chyba że nieudane logowanie pochodzi z nowych aplikacji uruchamianych przed skonfigurowaniem użytkownika / przepustki.

jeśli serwer jest w jakiś sposób narażony na zewnętrzne połączenia na 3306, chyba że jest to celowe i potrzebne, ustawiłbym konfigurację, jak powiedział Nick, a także spojrzałbym na użycie iptables do ograniczenia ruchu do 3306 tylko z serwerów aplikacji.

cpbills
źródło
MySQL automatycznie odrzuca połączenia z adresu IP, które nie mają co najmniej jednego pasującego wiersza w mysql.user
David M
0

Na stronie http://www.mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging/ autor pokazuje metodę przechwytywania pakietów za pomocą tcpdump i filtrowania danych wyjściowych na podstawie ciągu.

To rozwiązuje twoje obawy dotyczące ogólnego_logu i wydajności, chociaż sam tcpdump może ponieść niewielką karę wydajności. To rozwiązanie rejestruje także mniej danych niż ogólny dziennik zapytań.

Nie używałem tego sam, ale brzmi to bardzo przydatne.

Stefan Lasiewski
źródło
Brzmi dobrze, ale link nie działa dla mnie.
CarlosH
Link działa dla mnie dziś rano, używając przeglądarki Firefox. mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging
Stefan Lasiewski
I chciałbym usłyszeć twoje doświadczenia z tym.
Stefan Lasiewski