Warum müssen Sie ein Audit-Plugin für Ihre Datenbank verwenden?
Das Auditieren in einer Datenbank weicht nicht von seiner Bedeutung ab, da es die gleiche Konnotation hat, d. h. inspizieren, untersuchen und bewerten für solche Datenbankereignisse/-transaktionen, die in Ihrer Datenbank protokolliert oder durchgeführt werden. Tatsächlich fügt es mehr Durchführbarkeit für Datenbanken hinzu, insbesondere als Sicherheitsmerkmal, da es die administrative Seite dazu anregt, bei der Verwaltung und Verarbeitung von Daten sensibel zu sein. Es umfasst die Verantwortung und Rechenschaftspflicht für das Datenmanagement.
Datenbank-Audit erfordert, dass alle Transaktionen (d. h. DDLs und DMLs) protokolliert werden müssen, um Ablaufverfolgungen aufzuzeichnen und einen vollständigen Überblick darüber zu erhalten, was während des Datenbankbetriebs passiert. Diese Operationen können folgende Überlegungen anstellen:
- Bietet Möglichkeiten zum Überwachen und Debuggen, um die Leistung auf der Anwendungsseite zu steigern
- Sicherheits- und Datenschutzkonformität wie PCI DSS, HIPAA, GDPR usw.
- Bietet die Möglichkeit, Datenautonomie speziell für mandantenfähige Umgebungen zu erlangen. Auf diese Weise können sie Datenanalysen durchführen, um Transaktionen basierend auf der Sensibilität und dem Datenschutz für Sicherheits- und Leistungsüberlegungen zu differenzieren und zu filtern.
- Steuert administrative Aktionen, um Datenbankbenutzer an unangemessenen Aktionen zu hindern, die auf verdächtigen Ermittlungsaktivitäten basieren oder durch ihre Rolle eingeschränkt sind. Das bedeutet, dass z. B. Lesebenutzer nur Daten abrufen und nur eingeschränkt auf bestimmte Datenbanken zugreifen dürfen, für die sie gemäß ihrer beruflichen Rolle nur oder mit eingeschränktem Umfang verantwortlich sind.
Was ist das Percona Audit Log Plugin?
Frühere Ansätze zur Prüfung von Transaktionen oder Ereignissen, die in Ihrer Datenbank ausgeführt werden, können ein heftiger Ansatz sein. Allgemeine Protokolldatei aktivieren oder entweder langsames Abfrageprotokoll verwenden. Es ist kein perfekter Ansatz, daher schafft es das Audit-Log-Plugin, mehr Flexibilität und anpassbare Parameter hinzuzufügen, um die Lücke zu schließen. Percona behauptet, dass ihr Audit Log Plugin eine Alternative zu MySQL Enterprise Audit ist. Obwohl das stimmt, gibt es hier einen Vorbehalt, dass das Audit Log Plugin von Percona nicht für Oracle MySQL zur Installation verfügbar ist. Es gibt keinen herunterladbaren Tarball für diese Binärdatei, aber es ist einfach zu installieren, indem einfach eine vorhandene audit_log.so-Datei von einer vorhandenen Percona-Server- oder Percona-XtraDB-Cluster-Installation kopiert wird. Am besten empfiehlt es sich, eine vorhandene audit_log.so derselben Version von Percona Server auch mit der MySQL-Community-Version zu verwenden oder zu kopieren. Wenn also Ihre MySQL Community-Zielversion 8.x ist, verwenden Sie audit_log.so auch von einer Percona Server 8.x-Version. Wir werden Ihnen später in diesem Blog zeigen, wie Sie dies in einer MySQL-Community-Version tun.
Das Percona Audit Log Plugin ist selbstverständlich Open Source und steht zur kostenlosen Nutzung zur Verfügung. Wenn Ihre Unternehmensanwendung also eine Backend-Datenbank wie Percona Server oder Vanilla MySQL verwendet, können Sie dieses Plugin verwenden. MySQL Enterprise Audit ist nur für MySQL Enterprise Server verfügbar und das hat seinen Preis. Darüber hinaus aktualisiert und wartet Percona diese Software ständig, und dies ist ein großer Vorteil, wenn eine größere Version des MySQL-Upstreams verfügbar ist. Percona wird auch basierend auf seiner Hauptversion veröffentlicht, was sich auf Updates und getestete Funktionen sowie auf sein Audit-Log-Plugin-Tool auswirkt. Daher muss jede Inkompatibilität mit früheren Versionen ebenfalls aktualisiert werden, um mit der neuesten und sichersten Version von MySQL zu funktionieren.
Das Percona-Audit-Log-Plug-in ist als eines der Sicherheitstools gekennzeichnet, aber lassen Sie uns dies noch einmal klarstellen. Dieses Tool wird zum Auditieren von Protokollen verwendet. Der einzige Zweck besteht darin, Transaktionsspuren aus Ihrer Datenbank zu protokollieren. Es führt keine Firewalls durch und wendet keine vorbeugenden Maßnahmen an, um bestimmte Benutzer zu blockieren. Dieses Tool dient hauptsächlich zum Auditieren von Protokollen und zur Analyse von Datenbanktransaktionen.
Verwendung des Percona Audit Log Plugins
In diesem Abschnitt gehen wir darauf ein, wie man das Plugin installiert, verwendet und wie nützlich es insbesondere in realen Situationen sein kann.
Installieren des Plugins
Percona wird mit verschiedenen Quellen für ihre Datenbank-Binärdateien geliefert. Sobald Sie den Datenbankserver ordnungsgemäß installiert haben, platziert die Standardinstallation das gemeinsam genutzte Objekt des Überwachungsprotokoll-Plug-Ins in /usr/lib64/mysql/plugin/audit_log.so. Die Installation des Plugins, um es innerhalb des Percona/MySQL-Servers zu aktivieren, kann mit den folgenden Aktionen unten durchgeführt werden. Diese Schritte werden mit Percona Server 8.0 ausgeführt,
mysql> select @@version_comment, @@version\G
*************************** 1. row ***************************
@@version_comment: Percona Server (GPL), Release 12, Revision 7ddfdfe
@@version: 8.0.21-12
1 row in set (0.00 sec)
Dann sind die Schritte wie folgt:
-
Überprüfen Sie zuerst, ob das Plugin existiert oder nicht
## Überprüfen Sie, ob das Plugin aktiviert oder installiert ist
mysql> select * from information_schema.PLUGINS where PLUGIN_NAME like '%audit%';
Empty set (0.00 sec)
mysql> show variables like 'audit%';
Empty set (0.00 sec)
-
Installieren Sie das Plugin,
## Überprüfen Sie, wo sich die Plugins befinden
mysql> show variables like 'plugin%';
+---------------+--------------------------+
| Variable_name | Value |
+---------------+--------------------------+
| plugin_dir | /usr/lib64/mysql/plugin/ |
+---------------+--------------------------+
1 row in set (0.00 sec)
mysql> \! ls -a /usr/lib64/mysql/plugin/audit_log.so
/usr/lib64/mysql/plugin/audit_log.so
## Fertig und dann installieren
mysql> INSTALL PLUGIN audit_log SONAME 'audit_log.so';
Query OK, 0 rows affected (0.01 sec)
-
Überprüfen Sie es noch einmal
mysql> select * from information_schema.PLUGINS where PLUGIN_NAME like '%audit%'\G
*************************** 1. row ***************************
PLUGIN_NAME: audit_log
PLUGIN_VERSION: 0.2
PLUGIN_STATUS: ACTIVE
PLUGIN_TYPE: AUDIT
PLUGIN_TYPE_VERSION: 4.1
PLUGIN_LIBRARY: audit_log.so
PLUGIN_LIBRARY_VERSION: 1.10
PLUGIN_AUTHOR: Percona LLC and/or its affiliates.
PLUGIN_DESCRIPTION: Audit log
PLUGIN_LICENSE: GPL
LOAD_OPTION: ON
1 row in set (0.00 sec)
mysql> show variables like 'audit%';
+-----------------------------+---------------+
| Variable_name | Value |
+-----------------------------+---------------+
| audit_log_buffer_size | 1048576 |
| audit_log_exclude_accounts | |
| audit_log_exclude_commands | |
| audit_log_exclude_databases | |
| audit_log_file | audit.log |
| audit_log_flush | OFF |
| audit_log_format | OLD |
| audit_log_handler | FILE |
| audit_log_include_accounts | |
| audit_log_include_commands | |
| audit_log_include_databases | |
| audit_log_policy | ALL |
| audit_log_rotate_on_size | 0 |
| audit_log_rotations | 0 |
| audit_log_strategy | ASYNCHRONOUS |
| audit_log_syslog_facility | LOG_USER |
| audit_log_syslog_ident | percona-audit |
| audit_log_syslog_priority | LOG_INFO |
+-----------------------------+---------------+
18 rows in set (0.00 sec)
Installieren des Percona-Audit-Plugins über die MySQL-Community-Version
Wenn Sie auf Oracle MySQL-Versionen installieren, wie oben erwähnt, stimmen Sie immer mit der Version von Percona Server überein, aus der die Datei audit_log.so stammt. So habe ich zum Beispiel die folgenden Versionen von MySQL unten,
nodeB $ mysqld --version
/usr/sbin/mysqld Ver 8.0.22 for Linux on x86_64 (MySQL Community Server - GPL)
Dagegen ist mein Percona-Server,
nodeA $ mysqld --version
/usr/sbin/mysqld Ver 8.0.21-12 for Linux on x86_64 (Percona Server (GPL), Release 12, Revision 7ddfdfe)
Alles, was Sie tun müssen, ist von der Percona-Quelle auf den Server zu kopieren, auf dem Sie MySQL Community Server installiert haben.
nodeA $ scp /usr/lib64/mysql/plugin/audit_log.so nodeB:/tmp/
Wechseln Sie dann nach /usr/lib64/mysql/plugin, für das sich Plugins befinden sollen.
[email protected] > show global variables like 'plugin%';
+---------------+--------------------------+
| Variable_name | Value |
+---------------+--------------------------+
| plugin_dir | /usr/lib64/mysql/plugin/ |
+---------------+--------------------------+
1 row in set (0.00 sec)
nodeB $ mv /tmp/audit_log.so /usr/lib64/mysql/plugin
Im Übrigen können Sie den oben beschriebenen Schritten folgen, um mit der Installation oder Aktivierung des Percona Audit Login Plugin for MySQL Community Server fortzufahren.
Konfiguration und Verwaltung des Percona-Audit-Log-Plugins
Das Percona Audit Log Plugin ist ein sehr flexibles Tool, das sehr konfigurierbar oder anpassbar ist, um Ihren Anforderungen gerecht zu werden, wenn Sie Ihre Datenbankverbindungen oder -transaktionen protokollieren. Es handelt sich um eine lineare Modeimplementierung für die jeweilige Konfiguration. Auch wenn sie flexibel durch die jeweiligen Parameter angepasst werden kann, werden nur diese angegebenen Werte während der gesamten Laufzeit Ihrer Datenbank protokolliert und überwacht, und dies erfolgt standardmäßig asynchron. Alle Parametervariablen in diesem Plugin sind wichtig, aber unten sind die wichtigsten Parameter, die Sie verwenden können, um das Plugin zu konfigurieren:
- audit_log_strategy – Wird verwendet, um die Überwachungsprotokollstrategie anzugeben und wenn audit_log_handler auf FILE gesetzt ist. Dabei sind entweder die folgenden Werte möglich:
- ASYNCHRONOUS - (Standard) Protokollierung mit Speicherpuffer, Nachrichten nicht löschen, wenn Puffer voll ist
- LEISTUNG - Protokollieren mit Speicherpuffer, Meldungen verwerfen, wenn Puffer voll ist
- SEMISYNCHRONOUS - direkt in Datei protokollieren, nicht leeren und jedes Ereignis synchronisieren
- SYNCHRONOUS - direkt in Datei protokollieren, jedes Ereignis löschen und synchronisieren
- audit_log_file - Dateiname, der zum Speichern von Überwachungsprotokollen verwendet wird, standardmäßig die Datei ${datadir}/audit.log. Sie können den relativen Dateipfad aus dem Datenverzeichnis Ihrer Datenbank oder den absoluten Dateipfad verwenden.
- audit_log_flush - Nützlich, wenn Sie das Protokoll leeren müssen, z. B. in Verbindung mit logrotate
- audit_log_buffer_size - Percona Audit Log zeichnet standardmäßig Ablaufverfolgungen im Standarddateiprotokoll auf. Diese Variable ist nützlich, wenn audit_log_handler =FILE und audit_log_strategy =ASYNCHRONOUS oder PERFORMANCE. Wenn es gesetzt ist, wird es verwendet, um die Größe des Speicherpuffers anzugeben, der für die Protokollierung verwendet wird. Dadurch können Sie Leistungseinbußen vermeiden, wenn Audit-Protokolle aktiviert sind.
- audit_log_format - Format zum Angeben beim Aufzeichnen oder Speichern von Informationen in Ihrer Überwachungsprotokolldatei. Akzeptiert Formate wie OLD/NEW (basierend auf dem XML-Format), JSON und CSV. Dies ist sehr nützlich, besonders wenn Sie später andere externe Tools integrieren, um Ihre Audit-Protokolle abzurufen, die bestimmte Formate unterstützen.
- audit_log_exclude_accounts /audit_log_include_accounts – Wird verwendet, um die Liste der Benutzer anzugeben, die Sie entsprechend ihrem Parameternamen einschließen oder ausschließen können. Akzeptiert NULL, andernfalls eine durch Kommas getrennte Liste im Format [email protected] oder 'user'@'host'. Diese Variablen schließen sich gegenseitig aus, also muss die eine oder die andere aufgehoben werden (d. h. der Wert ist NULL).
- audit_log_include_commands /audit_log_exclude_commands – Wird verwendet, um die Liste der Befehle anzugeben (entweder NULL- oder kommagetrennte Liste), für die eine Filterung nach SQL-Befehlstyp angewendet wird. Diese Variablen schließen sich gegenseitig aus, daher muss die eine oder andere deaktiviert werden (d. h. der Wert ist NULL). Um die Liste der SQL-Befehlstypen in MySQL oder Percona abzurufen, gehen Sie wie folgt vor:
- Aktivieren Sie die Variable performance_schema=ON in Ihrer my.cnf (erfordert einen Neustart des Datenbankservers)
- Führen Sie die folgende Abfrage aus:SELECT GROUP_CONCAT(SUBSTRING_INDEX(name, '/', -1) ORDER BY name) sql_statement FROM performance_schema.setup_instruments WHERE name LIKE "statement/sql/%"\G
- audit_log_include_databases /audit_log_exclude_databases – Wird verwendet, um anzugeben, dass nach Datenbanknamen und in Verbindung mit audit_log_{include,exclude}_commands gefiltert wird, um die Liste der Befehle zu filtern, um beim Protokollieren während der Auditprotokolle detaillierter zu sein. Diese Variablen schließen sich gegenseitig aus, also muss die eine oder die andere aufgehoben werden (d. h. der Wert ist NULL).
- audit_log_policy - Wird verwendet, um anzugeben, welche Ereignisse protokolliert werden sollen. Technisch gesehen können Sie diese Variable für Ihre Audit-Protokollierung dynamisch aktivieren oder deaktivieren (Wert auf NONE setzen). Mögliche Werte sind:
- ALLE - alle Veranstaltungen werden protokolliert
- LOGINS - nur Logins werden protokolliert
- QUERIES - nur Abfragen werden protokolliert
- NONE - es werden keine Ereignisse protokolliert
Verwalten des Audit-Log-Plugins
Wie bereits erwähnt, geht die Standardprotokolldatei zu ${data_dir}/audit.log und verwendet das XML-Format, genau wie in meinem Beispiel unten:
[[email protected] ~]# ls /var/lib/mysql/audit.log | xargs tail -28
<AUDIT_RECORD
NAME="Ping"
RECORD="28692714_2020-10-28T19:12:18"
TIMESTAMP="2020-10-29T09:39:56Z"
COMMAND_CLASS="error"
CONNECTION_ID="10"
STATUS="0"
SQLTEXT=""
USER="cmon[cmon] @ [192.168.10.200]"
HOST=""
OS_USER=""
IP="192.168.10.200"
DB="information_schema"
/>
<AUDIT_RECORD
NAME="Query"
RECORD="28692715_2020-10-28T19:12:18"
TIMESTAMP="2020-10-29T09:39:56Z"
COMMAND_CLASS="show_status"
CONNECTION_ID="10"
STATUS="0"
SQLTEXT="SHOW GLOBAL STATUS"
USER="cmon[cmon] @ [192.168.10.200]"
HOST=""
OS_USER=""
IP="192.168.10.200"
DB="information_schema"
/>
Lassen Sie uns nun das Percona Audit Log Plugin in einem realen Szenario verwalten. Inspiriert von der Arbeit von Dani's Blog von Percona, wollen wir die folgenden Variablen in my.cnf ändern,
[[email protected] ~]# grep -i 'audit' /etc/my.cnf
## Audit Log
audit_log_format=JSON
audit_log_strategy=PERFORMANCE
audit_log_policy=QUERIES
audit_log_exclude_databases=s9s
Dann lass uns die folgende Datenbank und Tabellen erstellen,
CREATE DATABASE s9s;
CREATE TABLE `audit_records` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `audit_record` json, PRIMARY KEY (`id`) ) ENGINE=InnoDB;
Dann lassen Sie uns eine benannte Pipe oder FIFO in Linux verwenden, um Protokolle zu sammeln, die für die Prüfung bereit sind, die wir aber später problemlos verwenden können.
$ mkfifo /tmp/s9s_fifo
$ exec 1<>/tmp/s9s_fifo
$ tail -f /var/lib/mysql/audit.log 1>/tmp/s9s_fifo 2>&1
Then, let's insert any logs to our table `s9s`.`audit_records` using the following script below,
#/bin/bash
pipe=/tmp/s9s_fifo
while true; do
if read line <$pipe; then
if [[ "$line" == 'quit' ]]; then
break
fi
mysql --show-warnings -vvv -e "INSERT INTO s9s.audit_records (audit_record) VALUES(\"${line//\"/\\\"}\")"
fi
done
Dann habe ich versucht, einen Benchmark mit sysbench auszuführen. Nun, mit den folgenden Einträgen habe ich,
mysql> select count(1) from audit_records\G
*************************** 1. row ***************************
count(1): 37856
1 row in set (0.11 sec)
Ich kann einige Prüfungen mit JSON durchführen, was es mir ermöglicht, Prüfungen und Untersuchungen oder sogar Leistungsanalysen meiner Datenbank durchzuführen. Zum Beispiel
mysql> SELECT top10_select_insert from ((select audit_record->"$.audit_record" as top10_select_insert from audit_records where audit_record->"$.audit_record.command_class" in ('select') order by audit_records.id desc limit 10) union all (select audit_record->"$.audit_record" as top10_select_insert from audit_records where audit_record->"$.audit_record.command_class" in ('insert') order by audit_records.id desc limit 10)) AS b\G
*************************** 1. row ***************************
top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @ [192.168.10.200]", "record": "326263176_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "SELECT DISTINCT c FROM sbtest1 WHERE id BETWEEN 5001 AND 5100 ORDER BY c", "timestamp": "2020-10-29T11:11:56Z", "command_class": "select", "connection_id": "25143"}
*************************** 2. row ***************************
top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @ [192.168.10.200]", "record": "326263175_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "SELECT c FROM sbtest4 WHERE id BETWEEN 4875 AND 4974 ORDER BY c", "timestamp": "2020-10-29T11:11:56Z", "command_class": "select", "connection_id": "25143"}
*************************** 3. row ***************************
top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @ [192.168.10.200]", "record": "326263174_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "SELECT SUM(k) FROM sbtest1 WHERE id BETWEEN 5017 AND 5116", "timestamp": "2020-10-29T11:11:56Z", "command_class": "select", "connection_id": "25143"}
*************************** 4. row ***************************
top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @ [192.168.10.200]", "record": "326263173_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "SELECT c FROM sbtest8 WHERE id BETWEEN 4994 AND 5093", "timestamp": "2020-10-29T11:11:56Z", "command_class": "select", "connection_id": "25153"}
*************************** 5. row ***************************
top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @ [192.168.10.200]", "record": "326263172_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "SELECT c FROM sbtest3 WHERE id=4976", "timestamp": "2020-10-29T11:11:56Z", "command_class": "select", "connection_id": "25153"}
*************************** 6. row ***************************
top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @ [192.168.10.200]", "record": "326263171_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "SELECT c FROM sbtest3 WHERE id=5018", "timestamp": "2020-10-29T11:11:56Z", "command_class": "select", "connection_id": "25153"}
*************************** 7. row ***************************
top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @ [192.168.10.200]", "record": "326263170_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "SELECT c FROM sbtest3 WHERE id=5026", "timestamp": "2020-10-29T11:11:56Z", "command_class": "select", "connection_id": "25153"}
*************************** 8. row ***************************
top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @ [192.168.10.200]", "record": "326263169_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "SELECT c FROM sbtest3 WHERE id=5711", "timestamp": "2020-10-29T11:11:56Z", "command_class": "select", "connection_id": "25153"}
*************************** 9. row ***************************
top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @ [192.168.10.200]", "record": "326263168_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "SELECT c FROM sbtest3 WHERE id=5044", "timestamp": "2020-10-29T11:11:56Z", "command_class": "select", "connection_id": "25153"}
*************************** 10. row ***************************
top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @ [192.168.10.200]", "record": "326263167_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "SELECT c FROM sbtest3 WHERE id=5637", "timestamp": "2020-10-29T11:11:56Z", "command_class": "select", "connection_id": "25153"}
*************************** 11. row ***************************
top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @ [192.168.10.200]", "record": "326263151_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "INSERT INTO sbtest9 (id, k, c, pad) VALUES (4998, 4986, '02171032529-62046503057-07366460505-11685363597-46873502976-33077071866-44215205484-05994642442-06380315383-02875729800', '19260637605-33008876390-94789070914-09039113107-89863581488')", "timestamp": "2020-10-29T11:11:56Z", "command_class": "insert", "connection_id": "25124"}
*************************** 12. row ***************************
top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @ [192.168.10.200]", "record": "326263133_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "INSERT INTO sbtest8 (id, k, c, pad) VALUES (6081, 4150, '18974493622-09995560953-16579360264-35381241173-70425414992-87533708595-45025145447-98882906947-17081170077-49181742629', '20737943314-90440646708-38143024644-95915967543-47972430163')", "timestamp": "2020-10-29T11:11:56Z", "command_class": "insert", "connection_id": "25133"}
*************************** 13. row ***************************
top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @ [192.168.10.200]", "record": "326263126_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "INSERT INTO sbtest2 (id, k, c, pad) VALUES (5014, 5049, '82143477938-07198858971-84944276583-28705099377-04269543238-74209284999-24766869883-70274359968-19384709611-56871076616', '89380034594-52170436945-89656244047-48644464580-26885108397')", "timestamp": "2020-10-29T11:11:56Z", "command_class": "insert", "connection_id": "25135"}
*************************** 14. row ***************************
top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @ [192.168.10.200]", "record": "326263119_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "INSERT INTO sbtest5 (id, k, c, pad) VALUES (4995, 3860, '07500343929-19373180618-48491497019-86674883771-87861925606-04683804124-03278606074-05397614513-84175620410-77007118978', '19374966620-11798221232-19991603086-34443959669-69834306417')", "timestamp": "2020-10-29T11:11:56Z", "command_class": "insert", "connection_id": "25142"}
*************************** 15. row ***************************
top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @ [192.168.10.200]", "record": "326263112_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "INSERT INTO sbtest10 (id, k, c, pad) VALUES (5766, 5007, '46189905191-42872108894-20541866044-43286474408-49735155060-20388245380-67571749662-72179825415-56363344183-47524887111', '24559469844-22477386116-04417716308-05721823869-32876821172')", "timestamp": "2020-10-29T11:11:56Z", "command_class": "insert", "connection_id": "25137"}
*************************** 16. row ***************************
top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @ [192.168.10.200]", "record": "326263083_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "INSERT INTO sbtest7 (id, k, c, pad) VALUES (5033, 4986, '20695843208-59656863439-60406010814-11793724813-45659184103-02803540858-01466094684-30557262345-15801610791-28290093674', '14178983572-33857930891-42382490524-21373835727-23623125230')", "timestamp": "2020-10-29T11:11:56Z", "command_class": "insert", "connection_id": "25118"}
*************************** 17. row ***************************
top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @ [192.168.10.200]", "record": "326263076_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "INSERT INTO sbtest1 (id, k, c, pad) VALUES (5029, 5016, '72342762580-04669595160-76797241844-46205057564-77659988460-00393018079-89701448932-22439638942-02011990830-97695117676', '13179789120-16401633552-44237908265-34585805608-99910166472')", "timestamp": "2020-10-29T11:11:56Z", "command_class": "insert", "connection_id": "25121"}
*************************** 18. row ***************************
top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @ [192.168.10.200]", "record": "326263036_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "INSERT INTO sbtest1 (id, k, c, pad) VALUES (5038, 5146, '62239893938-24763792785-75786071570-64441378769-99060498468-07437802489-36899434285-44705822299-70849806976-77287283409', '03220277005-21146501539-10986216439-83162542410-04253248063')", "timestamp": "2020-10-29T11:11:55Z", "command_class": "insert", "connection_id": "25127"}
*************************** 19. row ***************************
top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @ [192.168.10.200]", "record": "326263018_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "INSERT INTO sbtest4 (id, k, c, pad) VALUES (5004, 5028, '15487433957-59189974170-83116468418-96078631606-58760747556-09307871236-40520753062-17596570189-73692856496-38267942694', '98937710805-24695902707-05013528796-18454393948-39118534483')", "timestamp": "2020-10-29T11:11:55Z", "command_class": "insert", "connection_id": "25129"}
*************************** 20. row ***************************
top10_select_insert: {"db": "sbtest", "ip": "192.168.10.200", "host": "", "name": "Query", "user": "cmon[cmon] @ [192.168.10.200]", "record": "326262989_2020-10-29T10:35:07", "status": 0, "os_user": "", "sqltext": "INSERT INTO sbtest3 (id, k, c, pad) VALUES (5015, 5030, '30613877119-41343977889-67711116708-96041306890-46480766663-68231747217-07404586739-83073703805-75534384550-12407169697', '65220283880-37505643788-94809192635-84679347406-74995175373')", "timestamp": "2020-10-29T11:11:55Z", "command_class": "insert", "connection_id": "25139"}
20 rows in set (0.00 sec)
Aggregieren Sie Ihre Audit-Protokolle mit anderen Tools
Jetzt, da Sie in der Lage sind, die Ausgabe Ihrer Audit-Protokolle zu analysieren, können Sie damit beginnen, sie in andere externe Tools einzubinden und mit der Aggregation mit Ihrer aktuellen Umgebung oder Ihrem Technologie-Stack zu beginnen, solange JSON gelesen oder unterstützt wird. Verwenden Sie beispielsweise ELK (Elasticsearch, Logstash Kibana), um Ihre Protokolle zu analysieren und zu zentralisieren. Sie können auch versuchen, Graylog oder Fluentd zu integrieren. Andererseits können Sie Ihren eigenen Viewer erstellen und in Ihr aktuelles Software-Setup integrieren. Die Verwendung von Percona Audit Log macht diese Dinge machbar, um mehr Analysen mit hoher Produktivität durchzuführen, und natürlich auch machbar und erweiterbar.