Perché è necessario utilizzare un plug-in di controllo per il database?
Il controllo in un database non devia dal suo significato in quanto condivide la stessa connotazione, ovvero ispezionare, esaminare e valutare tali eventi/transazioni del database che vengono registrati o eseguiti all'interno del database. In effetti, aggiunge più fattibilità per i database, soprattutto come funzionalità di sicurezza, poiché raccomanda che la parte amministrativa sia sensibile per la gestione e l'elaborazione dei dati. Abbraccia la responsabilità e la responsabilità per la gestione dei dati.
L'audit del database richiede che per ogni transazione (es. DDL e DML) sia registrato in modo da registrare le tracce e ottenere la panoramica completa di ciò che sta accadendo durante le operazioni del database. Queste operazioni possono prendere le considerazioni:
- Fornisce capacità di monitoraggio e debug in modo da aumentare le prestazioni lato applicazione
- Conformità alla sicurezza e alla privacy dei dati come PCI DSS, HIPAA, GDPR, ecc.
- Fornisce la capacità di acquisire l'autonomia dei dati specifica per ambienti multi-tenancy. Ciò consente loro di eseguire analisi dei dati in modo da differenziare e filtrare le transazioni in base alla sensibilità e alla privacy per considerazioni di sicurezza e prestazioni.
- Guida le azioni amministrative per impedire agli utenti del database di compiere azioni inappropriate basate su attività investigative sospette o limitate dal suo ruolo. Ciò significa che gli utenti in lettura, ad esempio, possono solo estrarre dati e solo un accesso limitato a database specifici di cui sono responsabili o con portata limitata in base al loro ruolo lavorativo.
Cos'è il plugin Percona Audit Log?
Gli approcci precedenti sull'auditing delle transazioni o degli eventi in esecuzione nel database possono essere un approccio pesante. Abilitazione del file di registro generale o utilizzo del registro delle query lente. Non è un approccio perfetto, quindi il plug-in del registro di controllo riesce ad aggiungere più flessibilità e parametri personalizzabili per colmare il divario. Percona afferma che il loro Audit Log Plugin è un'alternativa a MySQL Enterprise Audit. Anche se questo è vero, c'è un avvertimento qui che il plug-in Audit Log di Percona non è disponibile per MySQL di Oracle per l'installazione. Non esiste un tarball scaricabile per questo binario, ma è facile da installare semplicemente copiando un file audit_log.so esistente da un Percona Server esistente o da un'installazione Percona XtraDB Cluster. È meglio consigliare di utilizzare o copiare un audit_log.so esistente della stessa versione di Percona Server anche con la versione della community MySQL. Quindi, se la versione della community MySQL di destinazione è 8.x, utilizzare audit_log.so anche da una versione 8.x di Percona Server. Ti mostreremo come farlo su una versione della community MySQL più avanti su questo blog.
Il plugin Percona Audit Log è ovviamente open-source ed è disponibile gratuitamente. Quindi, se la tua applicazione aziendale utilizza un database back-end come Percona Server o vanilla MySQL, puoi utilizzare questo plug-in. MySQL Enterprise Audit è disponibile solo per MySQL Enterprise Server e ha un prezzo. Inoltre, Percona aggiorna e mantiene costantemente questo software e questo rappresenta un grande vantaggio come se fosse disponibile una versione importante da MySQL a monte. Percona verrà rilasciato anche in base alla sua versione principale e ciò influisce sugli aggiornamenti e sulle funzionalità testate anche per il loro strumento plug-in del registro di controllo. Pertanto, qualsiasi incompatibilità rispetto alle versioni precedenti deve essere aggiornata per funzionare con la versione più recente e sicura di MySQL.
Il plugin Percona Audit Log è contrassegnato come uno degli strumenti di sicurezza, ma chiariamolo di nuovo. Questo strumento viene utilizzato per il controllo dei registri. Il suo unico scopo è registrare tracce di transazioni dal tuo database. Non esegue firewall né applica misure preventive per bloccare utenti specifici. Questo strumento serve principalmente per controllare i registri e utilizzarlo per l'analisi delle transazioni del database.
Utilizzo del plug-in Percona Audit Log
In questa sezione, esamineremo come installare, utilizzare e quanto può essere vantaggioso il plug-in, soprattutto nelle situazioni del mondo reale.
Installazione del plug-in
Percona viene fornito con vari sorgenti per i file binari del database. Dopo aver installato correttamente il server del database, l'installazione standard collocherà l'oggetto condiviso del plug-in del registro di controllo in /usr/lib64/mysql/plugin/audit_log.so. L'installazione del plug-in per abilitarlo all'interno del server Percona/MySQL può essere eseguita con le seguenti azioni. Questa procedura viene eseguita utilizzando Percona Server 8.0,
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)
Quindi i passaggi sono i seguenti:
-
Verifica prima se il plugin esiste o meno
## Verifica se il plugin è abilitato o installato
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)
-
Installa il plug-in,
## Controlla dove si trovano i plugin
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
## Pronto e quindi installa
mysql> INSTALL PLUGIN audit_log SONAME 'audit_log.so';
Query OK, 0 rows affected (0.01 sec)
-
Verificalo ancora una volta
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)
Installazione del plug-in Percona Audit sulla versione della community MySQL
Quando si installano versioni su Oracle MySQL, come accennato in precedenza, abbinare sempre la versione di Percona Server da cui proviene il file audit_log.so. Quindi, ad esempio, ho le seguenti versioni di MySQL di seguito,
nodeB $ mysqld --version
/usr/sbin/mysqld Ver 8.0.22 for Linux on x86_64 (MySQL Community Server - GPL)
Mentre il mio Percona Server lo è,
nodeA $ mysqld --version
/usr/sbin/mysqld Ver 8.0.21-12 for Linux on x86_64 (Percona Server (GPL), Release 12, Revision 7ddfdfe)
Tutto quello che devi fare è copiare dal sorgente Percona al server su cui hai installato MySQL Community Server.
nodeA $ scp /usr/lib64/mysql/plugin/audit_log.so nodeB:/tmp/
Quindi passa a /usr/lib64/mysql/plugin per i quali devono essere individuati i plugin.
[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
Per il resto, puoi seguire i passaggi sopra indicati per continuare a installare o abilitare il plug-in Percona Audit Login per MySQL Community Server.
Configurazione e gestione del plug-in Percona Audit Log
Percona Audit Log Plugin è uno strumento molto flessibile che è molto configurabile o personalizzabile per soddisfare le tue esigenze mentre registri le connessioni o le transazioni del database. È un'implementazione di moda lineare per la sua configurazione data, quindi anche se è flessibile per essere personalizzata in base ai parametri forniti, solo quei valori dati devono essere registrati e controllati durante tutto il tempo in cui il database è in esecuzione e viene eseguito in modo asincrono per impostazione predefinita. Ogni variabile di parametro in questo plug-in è importante, ma di seguito sono riportati i parametri più importanti che puoi utilizzare per configurare il plug-in:
- audit_log_strategy - Utilizzato per specificare la strategia del registro di controllo e quando audit_log_handler è impostato su FILE. ovvero sono possibili i seguenti valori:
- ASINCRONO - (predefinito) registra utilizzando il buffer di memoria, non eliminare i messaggi se il buffer è pieno
- PERFORMANCE - log utilizzando il buffer di memoria, elimina i messaggi se il buffer è pieno
- SEMSINCRONO - accedi direttamente al file, non svuota e sincronizza ogni evento
- SINCRONO - accedi direttamente al file, svuota e sincronizza ogni evento
- audit_log_file - Nome file da utilizzare per memorizzare i log di controllo, che per impostazione predefinita è file ${datadir}/audit.log. Puoi usare il percorso del file relativo dalla datadir del tuo database o il percorso del file assoluto.
- audit_log_flush - Utile quando è necessario svuotare il registro come utilizzato in coordinamento con logrotate
- audit_log_buffer_size - Per impostazione predefinita, Percona Audit Log registra le tracce nel file di registro predefinito. Questa variabile è utile quando audit_log_handler =FILE e audit_log_strategy =ASYNCHRONOUS o PERFORMANCE. Quando impostato, viene utilizzato per specificare la dimensione del buffer di memoria utilizzato per la registrazione. Ciò ti consente di evitare il degrado delle prestazioni quando è abilitato il controllo dei log.
- audit_log_format - Formato da specificare durante la registrazione o il salvataggio delle informazioni nel file di registro di controllo. Accetta formati come VECCHIO/NUOVO (basato sul formato XML), JSON e CSV. Questo è molto utile soprattutto quando incorpori in seguito altri strumenti esterni per estrarre i log di controllo che supportano formati specifici.
- audit_log_exclude_accounts /audit_log_include_accounts - Usato per specificare l'elenco di utenti che puoi includere o escludere rispetto al nome del parametro. Accetta NULL altrimenti un elenco separato da virgole nel formato [email protected] o 'utente'@'host'. Queste variabili si escludono a vicenda, quindi deve essere annullata (cioè il valore è NULL) l'una o l'altra
- audit_log_include_commands /audit_log_exclude_commands :utilizzato per specificare l'elenco di comandi (NULL o elenco separato da virgole) per i quali viene applicato il filtro in base al tipo di comando SQL. Queste variabili si escludono a vicenda, quindi deve essere annullata (cioè il valore è NULL) l'una o l'altra. Per ottenere l'elenco dei tipi di comando SQL in MySQL o Percona, procedere come segue:
- abilita la variabile performance_schema=ON nel tuo my.cnf (richiede il riavvio del server di database)
- Esegui la query seguente: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 - utilizzato per specificare di filtrare in base al nome del database e insieme a audit_log_{include,exclude}_commands per filtrare l'elenco dei comandi in modo da essere più granulare durante la registrazione durante il controllo dei log. Queste variabili si escludono a vicenda, quindi deve essere annullata (ovvero il valore è NULL) l'una o l'altra.
- audit_log_policy - Utilizzato per specificare quali eventi devono essere registrati. Tecnicamente, è possibile impostare questa variabile in modo dinamico per abilitare o disabilitare (impostare il valore su NONE) per la registrazione di controllo. I valori possibili sono:
- TUTTI - tutti gli eventi verranno registrati
- LOGIN - verranno registrati solo gli accessi
- QUERIES - verranno registrate solo le query
- NESSUNO - nessun evento verrà registrato
Gestione del plug-in del registro di controllo
Come accennato, il file di registro predefinito va in ${data_dir}/audit.log e utilizza il formato XML proprio come il mio esempio di seguito:
[[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"
/>
Ora gestiamo il plugin Percona Audit Log in uno scenario reale. Prendendo spunto dal lavoro del blog di Dani di Percona, prendiamo in considerazione la modifica delle seguenti variabili in my.cnf,
[[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
Quindi creiamo il seguente database e tabelle,
CREATE DATABASE s9s;
CREATE TABLE `audit_records` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `audit_record` json, PRIMARY KEY (`id`) ) ENGINE=InnoDB;
Quindi usiamo A named pipe o FIFO in Linux per raccogliere log pronti per l'auditing ma che possiamo usare in seguito in modo fattibile.
$ 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
Poi ho provato a eseguire un benchmark usando sysbench. Ora, con le seguenti voci che ho,
mysql> select count(1) from audit_records\G
*************************** 1. row ***************************
count(1): 37856
1 row in set (0.11 sec)
Posso eseguire un po' di auditing utilizzando JSON, il che mi rende possibile eseguire auditing e indagini o persino analisi delle prestazioni del mio database. Ad esempio,
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)
Aggrega i registri di controllo con altri strumenti
Ora che sei in grado di analizzare l'output dei log di controllo, puoi iniziare a incorporarlo in altri strumenti esterni e iniziare ad aggregarlo con il tuo ambiente o stack tecnologico corrente, purché legga o supporti JSON. Ad esempio, utilizzando ELK (Elasticsearch, Logstash Kibana) per analizzare e centralizzare i log. Potresti anche provare a incorporare con Graylog o Fluentd. D'altra parte, potresti creare il tuo visualizzatore e incorporarlo con la tua attuale configurazione del software. L'utilizzo di Percona Audit Log rende possibile eseguire queste cose per eseguire più analisi con un'elevata produttività e, naturalmente, anche fattibile ed estensibile.