Von Zeit zu Zeit gibt es auf unserem MySQL-Produktionsserver fehlgeschlagene Anmeldeversuche (MySQL-Dashboard warnt uns). Gibt es eine Möglichkeit, jeden erfolgreichen und fehlgeschlagenen Login auf dem MySQL-Server zu protokollieren, ohne dies zu aktivieren general_log
?
Wir denken, dies general_log
ist keine Option, da es sich um einen Produktionsserver mit hoher Auslastung handelt.
As of MySQL 5.5.28, MySQL Enterprise Edition includes MySQL Enterprise Audit, implemented using a server plugin named audit_log.
Nur die unternehmerische Version hat es.Antworten:
nur um die neugierigen zu informieren: grabe in dein fehlerprotokoll und presto!
(1). edit my.cnf (Einstellungsdokumentation hier )
(2). auf Befehl ausführen
(3). und du hast es!
(4). Wenn Sie den Benutzer einschränken müssen (DOS-Angriff oder Versuch zur Wiederherstellung des MySQL-Benutzerkennworts in einer Datenbank mit mehreren Benutzern), dann ( http://dev.mysql.com/doc/refman/5.5/en/user-resources.html )
auf nur 100 Versuche zur Wiederherstellung von Passwörtern pro Stunde zu beschränken.
quelle
Ich denke, das allgemeine Protokoll protokolliert unter anderem alle Anmeldeversuche (Erfolg und Misserfolg). Das Hauptproblem besteht darin, dass das allgemeine Protokoll die Leistung Ihrer Datenbank beeinträchtigt. Sie können das allgemeine Protokoll mit der Abfrage aktivieren
für neuere Versionen von MySQL.
quelle
/etc/mysql/my.cnf
von MySQL ändern muss ?--general-log
die Flags erweitern, wenn Sie MySQL starten.Hallo, ich denke nicht, dass es möglich ist.
Ab mysql 5.1.29 können Sie die Speicheroption (Tabelle oder Datei) und den Speicherort sowie das gewünschte Protokoll angeben - Fehler-, allgemeine, binäre oder langsame Abfrage. Soweit ich weiß, können Sie das Format des Protokolls oder das Protokollierungsformat nicht angeben. Ich könnte mich irren - aber ich denke, dass alle Anmeldeversuche im allgemeinen Protokoll und nicht im Fehlerprotokoll protokolliert werden.
Vorausgesetzt, Ihr MySQL-Server läuft auf einem anderen Rechner als Ihr Anwendungsserver, und Sie benötigen Port 3306 (oder was auch immer), der geöffnet ist, und Sie können keinen SSH-Tunnel verwenden, sollte Ihr MySQL-Server dennoch für niemanden zugänglich sein. nein. Ich empfehle dringend, es nicht dem Web-Verkehr auszusetzen, und wenn Sie es (wie im Fall, dass es sich nicht hinter Ihrer Firewall befindet) an die IP-Adresse oder den IP-Block Ihres Anwendungsservers und Ihre Administratorzugriffs-IP (wo Sie sich befinden) binden müssen Zugriff von)
Hoffentlich hilft das.
quelle
Man kann sich mit dem mysql-audit-plugin anmelden
connect
undquit
befehlen.audit-plugin-percona-5.7-1.1.7-805-linux-x86_64.zip
.so
Datei an den von angegebenen Ortmysqladmin variables | grep plugin_dir
.mysql>install plugin audit soname 'libaudit_plugin.so'
mysql>set global audit_json_file=ON
wird standardmäßig protokolliert er alle erfolgreichen Operationen. Durch das Setzen vonset global audit_record_cmds='quit,connect'
Protokollen werden vermutlich nur Verbindungen hergestellt und beendet, je nach Konfiguration des mysql-audit-plugins .So sieht es in der Datei zum An- und Abmelden aus:
quelle
Wenn der betreffende Server keine externen Verbindungen haben sollte, wie konfiguriert, würde ich mir Sorgen um eine Art Angriff auf Ihren App-Server machen, es sei denn, die fehlgeschlagenen Anmeldungen stammen von neuen Anwendungen, die vor der Konfiguration von Benutzer / Pass ausgerollt wurden.
Wenn der Server auf 3306 in irgendeiner Weise externen Verbindungen ausgesetzt ist, würde ich die Konfiguration wie von Nick angegeben festlegen und auch die Verwendung von iptables in Betracht ziehen, um den Datenverkehr von nur Ihren App-Servern auf 3306 zu beschränken.
quelle
Unter http://www.mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging/ zeigt der Autor eine Methode zum Erfassen der Pakete mit tcpdump und zum Filtern der Ausgabe basierend auf der Zeichenfolge.
Dies wirkt sich auf Ihre Bedenken hinsichtlich des general_log und der Leistung aus, obwohl tcpdump selbst möglicherweise eine geringfügige Leistungseinbuße nach sich zieht. Diese Lösung protokolliert auch weniger Daten als das allgemeine Abfrageprotokoll.
Ich habe das selbst nicht benutzt, aber es klingt sehr nützlich.
quelle