Hvorfor skal du bruge et revisionsplugin til din database?
Revision i en database afviger ikke fra dens betydning, da den deler den samme konnotation, dvs. at inspicere, undersøge og evaluere for sådanne databasehændelser/transaktioner, der bliver logget eller udført i din database. Det tilføjer faktisk mere gennemførlighed for databaser, især som en sikkerhedsfunktion, da det roser den administrative side for at være følsom for håndtering og behandling af data. Det omfatter ansvaret og ansvarligheden for datastyring.
Databaserevision kræver, at for hver transaktion (dvs. DDL'er og DML'er) skal logges for at registrere spor og få det fulde overblik over, hvad der sker under databaseoperationer. Disse operationer kan tage hensyn til:
- Giver mulighed for at overvåge og fejlfinde for at øge ydeevnen på applikationssiden
- Overholdelse af sikkerhed og databeskyttelse såsom PCI DSS, HIPAA, GDPR osv.
- Giver mulighed for at tage dataautonomi specifik for miljøer med flere lejemål. Dette giver dem mulighed for at tage dataanalyse for at differentiere og filtrere transaktioner baseret på følsomhed og privatliv af hensyn til sikkerhed og ydeevne.
- Fører administrative handlinger for at forhindre databasebrugere i upassende handlinger baseret på efterforskningsmistænkelig aktivitet eller begrænset af dens rolle. Det betyder, at læsebrugere for eksempel kun skal have lov til at trække data og kun have begrænset adgang til specifikke databaser, som de kun er ansvarlige for eller med begrænset omfang i overensstemmelse med deres jobrolle.
Hvad er Percona Audit Log Plugin?
Tidligere tilgange til revision af transaktioner eller hændelser, der kører i din database, kan være en heftig tilgang. Aktivering af generel logfil eller enten ved hjælp af langsom forespørgselslog. Det er ikke en perfekt tilgang, så auditlog-plugin'et formår at tilføje mere fleksibilitet og tilpasselige parametre for at udfylde hullet. Percona hævder, at deres Audit Log Plugin er et alternativ til MySQL Enterprise Audit. Selvom det er sandt, er der en advarsel her, at Perconas Audit Log Plugin ikke er tilgængelig for Oracles MySQL til installation. Der er ingen tarball, der kan downloades til denne binære fil, men den er nem at installere ved blot at kopiere en eksisterende audit_log.so fil fra en eksisterende Percona Server eller Percona XtraDB Cluster installation. Bedst at anbefale at bruge eller kopiere en eksisterende audit_log.so af den samme version af Percona Server med MySQL-fællesskabsversionen. Så hvis din målversion af MySQL Community er af 8.x, så brug også audit_log.so fra en Percona Server 8.x version. Vi viser dig, hvordan du gør dette på en MySQL-fællesskabsversion senere på denne blog.
Percona Audit Log Plugin er naturligvis open source, og det er tilgængeligt til fri afbenyttelse. Så hvis din virksomhedsapplikation bruger en backend-database såsom Percona Server eller vanilla MySQL, så kan du bruge dette plugin. MySQL Enterprise Audit er kun tilgængelig for MySQL Enterprise Server, og det kommer med en pris. Derudover opdaterer og vedligeholder Percona hele tiden denne software, og dette kommer som en stor fordel, som hvis en større udgivelse fra MySQL upstream er tilgængelig. Percona vil også frigive baseret på dens hovedversion, og det påvirker også opdateringer og testet funktionalitet for deres audit log plugin-værktøj. Så enhver inkompatibilitet fra dens tidligere versioner skal også opdateres for at fungere med den nyeste og sikreste version af MySQL.
Percona Audit Log Plugin er mærket som et af et sikkerhedsværktøj, men lad os præcisere dette igen. Dette værktøj bruges til revision af logfiler. Dets eneste formål er at logge spor af transaktioner fra din database. Det udfører ikke firewalling, og det anvender ikke forebyggende foranstaltninger for at blokere specifikke brugere. Dette værktøj er primært til revision af logfiler og brug til databasetransaktionsanalyse.
Brug af Percona Audit Log Plugin
I dette afsnit vil vi gennemgå, hvordan du installerer, bruger og hvor gavnligt pluginnet kan være, især i virkelige situationer.
Installation af plugin
Percona kommer med forskellige kilder til deres databasebinære filer. Når du har installeret databaseserveren korrekt, placerer standardinstallationen auditlog-plugin'et shared-object i /usr/lib64/mysql/plugin/audit_log.so. Installation af plugin'et som en måde at aktivere det på i Percona/MySQL-serveren kan gøres med følgende handlinger nedenfor. Dette trin udføres ved hjælp af 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)
Så er trinene som følger:
-
Bekræft først, om pluginnet findes eller ej
## Tjek om pluginnet er aktiveret eller installeret
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)
-
Installer pluginnet,
## Tjek, hvor plugins'erne er placeret
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
## Klar og installer derefter
mysql> INSTALL PLUGIN audit_log SONAME 'audit_log.so';
Query OK, 0 rows affected (0.01 sec)
-
Bekræft det igen
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)
Installation af Percona Audit Plugin over MySQL Community-versionen
Når du installerer på Oracle MySQL-versioner, som det vi har nævnt ovenfor, skal du altid matche den version af Percona Server, hvor filen audit_log.so kom fra. Så for eksempel har jeg følgende versioner af MySQL nedenfor,
nodeB $ mysqld --version
/usr/sbin/mysqld Ver 8.0.22 for Linux on x86_64 (MySQL Community Server - GPL)
Men min Percona Server er,
nodeA $ mysqld --version
/usr/sbin/mysqld Ver 8.0.21-12 for Linux on x86_64 (Percona Server (GPL), Release 12, Revision 7ddfdfe)
Alt du skal gøre er at kopiere fra Percona-kilden til den server, hvor du har MySQL Community Server installeret.
nodeA $ scp /usr/lib64/mysql/plugin/audit_log.so nodeB:/tmp/
Flyt derefter til /usr/lib64/mysql/plugin, hvortil plugins skal findes.
[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
Alt det andet, du kan følge trinene som angivet ovenfor for at fortsætte med at installere eller aktivere Percona Audit Login Plugin til MySQL Community Server.
Konfiguration og administration af Percona Audit Log Plugin
Percona Audit Log Plugin er et meget fleksibelt værktøj, der er meget konfigurerbart eller tilpasseligt for at imødekomme dine krav, mens du logger dine databaseforbindelser eller transaktioner. Det er en lineær modeimplementering for dens givne konfiguration, så selvom den er fleksibel til at blive tilpasset af dens givne parametre, skal kun de givne værdier logges og revideres under hele tiden, din database kører, og det udføres som standard asynkront. Alle parametervariabler i dette plugin er vigtige, men nedenfor er de vigtigste parametre, som du kan bruge til at konfigurere pluginnet:
- audit_log_strategy - Bruges til at specificere revisionslogstrategien, og når audit_log_handler er sat til FILE. hvilket er enten følgende værdier er mulige:
- ASYNKRON - (standard) log ved hjælp af hukommelsesbuffer, slip ikke meddelelser, hvis bufferen er fuld
- YDELSE - log ved hjælp af hukommelsesbuffer, slip beskeder, hvis bufferen er fuld
- HALVSYNKRON - log direkte til filen, tøm ikke og synkroniser hver begivenhed
- SYNKRON - log direkte til fil, tøm og synkroniser hver hændelse
- audit_log_file - Filnavn, der skal bruges til at gemme revisionslogfiler, som som standard er filen ${datadir}/audit.log. Du kan bruge relativ filsti fra din databases datadir eller den absolutte filsti.
- audit_log_flush - Nyttigt, når du skal skylle loggen som f.eks. bruges i koordinering med logrotate
- audit_log_buffer_size - Som standard registrerer Percona Audit Log spor til standardfilloggen. Denne variabel er nyttig, når audit_log_handler =FILE og audit_log_strategy =ASYNCHRONOUS eller PERFORMANCE. Når den er indstillet, bruges den til at angive størrelsen af den hukommelsesbuffer, der bruges til logning. Dette giver dig mulighed for at undgå forringelse af ydeevnestraffe, når revisionslogfiler er aktiveret.
- audit_log_format - Format til at specificere, når du optager eller gemmer oplysninger i din revisionslogfil. Accepterer formater som GAMMEL/NY (baseret på XML-format), JSON og CSV. Dette er meget nyttigt, især når du senere inkorporerer andre eksterne værktøjer til at trække dine revisionslogfiler, der understøtter specifikke formater.
- audit_log_exclude_accounts /audit_log_include_accounts - Bruges til at specificere listen over brugere, du kan inkludere eller ekskludere i forhold til dets parameternavn. Accepterer NULL ellers en kommasepareret liste i formatet [email protected] eller 'user'@'host'. Disse variabler er gensidigt udelukkende, så de skal være deaktiveret (dvs. værdien er NULL) den ene eller den anden
- audit_log_include_commands /audit_log_exclude_commands – Bruges til at angive listen over kommandoer (enten NULL eller kommasepareret liste), for hvilke der anvendes filtrering efter SQL-kommandotype. Disse variabler udelukker hinanden, så de skal være frakoblet (dvs. værdien er NULL) den ene eller den anden. For at få listen over SQL-kommandotyper i MySQL eller Percona skal du gøre følgende:
- aktiver performance_schema=ON variabel i din my.cnf (kræver genstart af databaseserver)
- Kør følgende forespørgsel:SELECT GROUP_CONCAT(SUBSTRING_INDEX(navn, '/', -1) ORDER BY name) sql_statement FRA performance_schema.setup_instruments WHERE navn LIKE "statement/sql/%"\G
- audit_log_include_databases /audit_log_exclude_databases - bruges til at specificere at filtrere efter databasenavn og sammen med audit_log_{include,exclude}_commands for at filtrere listen over kommandoer, så den bliver mere detaljeret, når der logges under revisionslogfiler. Disse variabler er gensidigt udelukkende, så de skal være deaktiveret (dvs. værdien er NULL) den ene eller den anden.
- audit_log_policy - Bruges til at angive, hvilke hændelser der skal logges. Teknisk set kan du indstille denne variabel dynamisk for at aktivere eller deaktivere (indstil værdien til INGEN) for din revisionslogning. Mulige værdier er:
- ALLE - alle begivenheder bliver logget
- LOGIN - kun logins vil blive logget
- QUERIES - kun forespørgsler vil blive logget
- INGEN - ingen begivenheder bliver logget
Administration af Audit Log Plugin
Som nævnt går standardlogfilen til ${data_dir}/audit.log og bruger XML-format ligesom mit eksempel nedenfor:
[[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"
/>
Lad os nu administrere Percona Audit Log Plugin i et virkeligt tilfælde. Inspireret af arbejdet på Danis blog af Percona, lad os overveje at ændre følgende variabler i 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
Lad os derefter oprette følgende database og tabeller,
CREATE DATABASE s9s;
CREATE TABLE `audit_records` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `audit_record` json, PRIMARY KEY (`id`) ) ENGINE=InnoDB;
Så lad os bruge et navngivet rør eller FIFO i Linux til at indsamle logfiler, der er klar til revision, men som vi senere kan bruge.
$ 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
Så prøvede jeg at køre et benchmark ved hjælp af sysbench. Nu har jeg med følgende poster,
mysql> select count(1) from audit_records\G
*************************** 1. row ***************************
count(1): 37856
1 row in set (0.11 sec)
Jeg kan foretage revision ved hjælp af JSON, hvilket gør det muligt for mig at foretage revision og undersøgelse eller endda præstationsanalyse af min database. For eksempel,
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)
Samle dine revisionslogfiler med andre værktøjer
Nu hvor du er i stand til at parse outputtet fra dine revisionslogfiler, kan du begynde at inkorporere det i andre eksterne værktøjer og begynde at aggregere med dit nuværende miljø eller teknologistak, så længe det læser eller understøtter JSON. For eksempel ved at bruge ELK (Elasticsearch, Logstash Kibana) til at parse og centralisere dine logfiler. Du kan også prøve at inkorporere med Graylog eller Fluentd. På den anden side kan du oprette din egen fremviser og integrere med din nuværende softwareopsætning. Brug af Percona Audit Log gør disse ting mulige til at lave flere analyser med høj produktivitet og selvfølgelig også mulige og udvidelige.