MySQL-Protokollierungsaktivität von einem bestimmten Benutzer oder einer bestimmten IP

8

Ich habe MySQL-Server.

Auf den Server wird von meiner Anwendung und von einem externen Prüfer (Person, die die MySQL-Workbench verwendet) zugegriffen. Der Prüfer verfügt über einen bestimmten Benutzer und ein bestimmtes Kennwort sowie eine bestimmte IP-Adresse und wird nur für ausgewählte Berechtigungen gewährt.

Ich muss die Aktivitäten des Auditors protokollieren. Kann man das irgendwie machen? Wenn nicht, kann ich die Pakete protokollieren, die aus dem Netzwerk kommen?

Darpet
quelle

Antworten:

9

Sie können das allgemeine Protokoll verwenden. In der Tat sollten Sie versuchen, die MySQL-Tabellenversion des allgemeinen Protokolls zu verwenden.

Wenn Sie dies ausführen:

SHOW CREATE TABLE mysql.general_log\G

Sie sollten so etwas sehen:

mysql> show create table mysql.general_log\G
*************************** 1. row ***************************
       Table: general_log
Create Table: CREATE TABLE `general_log` (
  `event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `user_host` mediumtext NOT NULL,
  `thread_id` int(11) NOT NULL,
  `server_id` int(10) unsigned NOT NULL,
  `command_type` varchar(64) NOT NULL,
  `argument` mediumtext NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log'
1 row in set (0.14 sec)

mysql>

In der user_hostSpalte werden der MySQL-Benutzer und die IP-Adresse / der DNS-Name aufgezeichnet, von dem der Befehl stammt.

Sie sagen wahrscheinlich gerade: "Diese Tabelle ist eine CSV-Datei. Ich müsste sie analysieren." Das stimmt, du müsstest. Wussten Sie jedoch, dass Sie es in eine MyISAM-Tabelle konvertieren können? Ich habe dies tatsächlich für einen DB Hosting-Kunden meines Arbeitgebers ausprobiert und einen Beitrag geschrieben, in dem dies erklärt wird (siehe den Feb 24, 2011Beitrag unten).

Hier sind die grundlegenden Schritte:

  1. Erstellen Sie die Tabelle mysql.general_log MyISAM

    Führen Sie Folgendes aus:

    CREATE TABLE mysql.general_log_original LIKE mysql.general_log;
    ALTER TABLE mysql.general_log ENGINE=MyISAM;
    ALTER TABLE mysql.general_log ADD INDEX (event_time);
  2. Aktivieren Sie das allgemeine Protokoll

    Fügen Sie Folgendes hinzu: /etc/my.cnf

    [mysqld]
    log-output=TABLE
    general-log

    Wenn Sie auch die Textversion des allgemeinen Protokolls möchten, fügen Sie Folgendes hinzu:

    [mysqld]
    log-output=TABLE,FILE
    general-log
    general-log-file=/var/log/mysql_general.log
  3. Starten Sie MySQL neu

    Einfach laufen service mysql restart

Ich habe viele Beiträge zur Verwendung des allgemeinen Protokolls und des langsamen Protokolls als MyISAM-Tabellen:

VORBEHALT

MySQL 5.5.28 hat kürzlich das Überwachungsprotokoll- Plugin und dessen Installation eingeführt .

Hier sind die Optionen

Diese sind für mich neu, daher habe ich derzeit keine Vor- oder Nachteile im Audit Log Plugin.

RolandoMySQLDBA
quelle
Ich neu du würdest das beantworten :), tolle Antwort, danke. Aber wird das allgemeine Protokoll die Leistung verringern (weil dort Tausende Abfragen durchgeführt werden)? Ich habe Schwierigkeiten, dass es nur für den angegebenen Benutzer möglich ist, das Protokoll zu aktivieren.
Darpet
Schauen Sie zurück auf meinen Beitrag vom 24. Februar 2011 ( dba.stackexchange.com/a/1434/877 ). Ich habe mysql.general_logmithilfe von Symlinks einer anderen Festplatte zugeordnet. Dadurch werden die Scheibenspindeln reduziert. Befindet mysql.general_loges sich auf derselben Festplatte wie die Daten, kann dies spürbar langsam sein.
RolandoMySQLDBA
Ich werde mir auch das Audit Log Plugin ansehen - scheint interessant.
Darpet
1
Das Audit-Log-Plugin ist nur ein "Enterprise Edition" -Angebot: dev.mysql.com/doc/refman/5.5/en/audit-log-plugin.html
Michael - sqlbot
@ Michael-sqlbot Oh das stinkt !!!
RolandoMySQLDBA