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_log
nie jest to możliwe, ponieważ jest to serwer produkcyjny o dużym obciążeniu.
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.Odpowiedzi:
tylko po to, by poinformować ciekawskiego: wejdź do dziennika błędów i presto!
(1). edytuj my.cnf (dokumentacja ustawień znajduje się tutaj )
(2). przy uruchomieniu polecenia
(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 )
ograniczyć tylko 100 prób odzyskania hasła na godzinę.
źródło
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
dla nowszych wersji MySQL.
źródło
/etc/mysql/my.cnf
mysql?--general-log
do flag po uruchomieniu MySQL.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.
źródło
Można zalogować się
connect
iquit
komendować za pomocą wtyczki mysql-audit-plug-in.audit-plugin-percona-5.7-1.1.7-805-linux-x86_64.zip
.so
plik w miejsce wskazane przezmysqladmin variables | grep plugin_dir
.mysql>install plugin audit soname 'libaudit_plugin.so'
mysql>set global audit_json_file=ON
domyślnie rejestruje wszystkie udane operacje. po ustawieniuset 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:
źródło
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.
źródło
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.
źródło