sql >> Database >  >> RDS >> MariaDB

De Percona Audit Log-plug-in gebruiken voor databasebeveiliging

Waarom moet u een auditplug-in voor uw database gebruiken?

Auditing in een database wijkt niet af van de betekenis ervan, aangezien het dezelfde connotatie heeft, d.w.z. inspecteren, onderzoeken en evalueren voor dergelijke databasegebeurtenissen/transacties die worden geregistreerd of uitgevoerd in uw database. Het voegt in feite meer haalbaarheid toe voor databases, vooral als beveiligingsfunctie, omdat het de administratieve kant aanprijst om gevoelig te zijn voor het beheren en verwerken van gegevens. Het omarmt de verantwoordelijkheid en aansprakelijkheid voor gegevensbeheer.

Database-audit vereist dat voor elke transactie (d.w.z. DDL's en DML's) moet worden gelogd om sporen vast te leggen en het volledige overzicht te krijgen van wat er gebeurt tijdens databasebewerkingen. Deze bewerkingen kunnen de volgende overwegingen aannemen:

  • Biedt de mogelijkheid om te monitoren en fouten op te sporen om de prestaties aan de applicatiekant te verbeteren
  • Beveiliging en naleving van gegevensprivacy, zoals PCI DSS, HIPAA, AVG, enz. 
  • Biedt de mogelijkheid om gegevensautonomie te nemen die specifiek zijn voor multitenancy-omgevingen. Hierdoor kunnen ze gegevensanalyse uitvoeren om transacties te differentiëren en te filteren op basis van de gevoeligheid en privacy voor veiligheids- en prestatieoverwegingen.
  • Stuurt administratieve acties aan om te voorkomen dat databasegebruikers ongepaste acties ondernemen op basis van verdachte onderzoeksactiviteiten of beperkt door hun rol. Dit betekent dat leesgebruikers bijvoorbeeld alleen gegevens mogen ophalen en slechts beperkte toegang tot specifieke databases waarvoor ze alleen verantwoordelijk zijn of met een beperkte reikwijdte in overeenstemming met hun functie.

Wat is de Percona Audit Log-plug-in?

Eerdere benaderingen voor het controleren van transacties of gebeurtenissen die in uw database worden uitgevoerd, kunnen een forse benadering zijn. Algemeen logbestand inschakelen of een langzame querylog gebruiken. Het is geen perfecte aanpak, dus de plug-in voor auditlogboeken slaagt erin om meer flexibiliteit en aanpasbare parameters toe te voegen om de leemte op te vullen. Percona beweert dat hun Audit Log Plugin een alternatief is voor MySQL Enterprise Audit. Hoewel dat waar is, is er een waarschuwing dat Percona's Audit Log Plugin niet beschikbaar is voor Oracle's MySQL voor installatie. Er is geen downloadbare tarball voor dit binaire bestand, maar het is eenvoudig te installeren door een bestaand audit_log.so-bestand te kopiëren van een bestaande Percona Server- of Percona XtraDB Cluster-installatie. Het is aan te raden om ook een bestaande audit_log.so van dezelfde versie van Percona Server met de MySQL-communityversie te gebruiken of te kopiëren. Dus als uw beoogde MySQL Community-versie 8.x is, gebruik dan ook de audit_log.so van een Percona Server 8.x-versie. We laten je later op deze blog zien hoe je dit kunt doen in een MySQL-communityversie.

De Percona Audit Log Plugin is natuurlijk open-source en is gratis beschikbaar. Dus als uw bedrijfstoepassing een backend-database gebruikt, zoals Percona Server of de vanilla MySQL, dan kunt u deze plug-in gebruiken. MySQL Enterprise Audit is alleen beschikbaar voor MySQL Enterprise Server en daar hangt een prijskaartje aan. Bovendien is Percona deze software voortdurend aan het updaten en onderhouden en dit is een groot voordeel, alsof er een belangrijke release van de MySQL-upstream beschikbaar is. Percona zal ook vrijgeven op basis van de hoofdversie en dat heeft ook invloed op updates en geteste functionaliteit voor hun plug-intool voor auditlogboeken. Dus elke incompatibiliteit met eerdere versies moet ook worden bijgewerkt om te werken met de meest recente en veilige versie van MySQL.

De Percona Audit Log Plugin is getagd als een beveiligingstool, maar laten we dit nogmaals verduidelijken. Deze tool wordt gebruikt voor het controleren van logboeken. Het enige doel is om sporen van transacties uit uw database te loggen. Het doet geen firewalling en past ook geen preventieve maatregelen toe om specifieke gebruikers te blokkeren. Deze tool is voornamelijk bedoeld voor het controleren van logboeken en voor analyse van databasetransacties.

De Percona Audit Log-plug-in gebruiken

In dit gedeelte bespreken we hoe de plug-in moet worden geïnstalleerd, gebruikt en hoe nuttig de plug-in kan zijn, vooral in praktijksituaties.

De plug-in installeren

Percona wordt geleverd met verschillende bronnen voor hun database-binaire bestanden. Nadat u de databaseserver correct heeft geïnstalleerd, plaatst de standaardinstallatie de auditlog-plug-in shared-object in /usr/lib64/mysql/plugin/audit_log.so. Het installeren van de plug-in als een manier om deze in te schakelen binnen de Percona/MySQL-server kan met de volgende acties hieronder. Deze stappen worden uitgevoerd met 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)

De stappen zijn dan als volgt:

  1. Controleer eerst of de plug-in bestaat of niet

## Controleer of de plug-in is ingeschakeld of geïnstalleerd

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)
  1. Installeer de plug-in,

## Controleer waar de plug-ins zich bevinden

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

## Klaar en dan installeren

mysql> INSTALL PLUGIN audit_log SONAME 'audit_log.so';

Query OK, 0 rows affected (0.01 sec)
  1. Verifieer het nogmaals

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)

De Percona Audit-plug-in installeren via de MySQL Community-versie

Als u op Oracle MySQL-versies installeert, moet u, zoals hierboven vermeld, altijd overeenkomen met de versie van Percona Server waar het bestand audit_log.so vandaan kwam. Ik heb bijvoorbeeld de volgende versies van MySQL hieronder,

nodeB $  mysqld --version

/usr/sbin/mysqld  Ver 8.0.22 for Linux on x86_64 (MySQL Community Server - GPL)

Terwijl mijn Percona-server is,

nodeA $ mysqld --version

/usr/sbin/mysqld  Ver 8.0.21-12 for Linux on x86_64 (Percona Server (GPL), Release 12, Revision 7ddfdfe)

Het enige wat u hoeft te doen is kopiëren van de Percona-bron naar de server waarop MySQL Community Server is geïnstalleerd.

nodeA $ scp /usr/lib64/mysql/plugin/audit_log.so nodeB:/tmp/

Verplaats vervolgens naar /usr/lib64/mysql/plugin waarvoor plug-ins moeten worden gevonden.

[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

Voor de rest kunt u de bovenstaande stappen volgen om door te gaan met het installeren of inschakelen van de Percona Audit Login Plugin voor MySQL Community Server.

Configuratie en beheer van Percona Audit Log Plugin

Percona Audit Log Plugin is een zeer flexibele tool die zeer configureerbaar of aanpasbaar is om aan uw vereisten te voldoen terwijl u uw databaseverbindingen of transacties vastlegt. Het is een lineaire mode-implementatie voor de gegeven configuratie, dus zelfs als het flexibel kan worden aangepast door de gegeven parameters, worden alleen die gegeven waarden gelogd en gecontroleerd gedurende de hele tijd dat je database draait en het wordt standaard asynchroon gedaan. Alle parametervariabelen in deze plug-in zijn belangrijk, maar hieronder staan ​​de belangrijkste parameters die u kunt gebruiken om de plug-in te configureren:

  • audit_log_strategy - Wordt gebruikt om de strategie voor het auditlogboek te specificeren en wanneer audit_log_handler is ingesteld op FILE. ofwel de volgende waarden zijn mogelijk: 
    • ASYNCHROON - (standaard) log met geheugenbuffer, laat geen berichten vallen als de buffer vol is
    • PRESTATIES - log in met geheugenbuffer, laat berichten vallen als buffer vol is
    • SEMISYNCHRONUS - log rechtstreeks in op bestand, spoel niet en synchroniseer elke gebeurtenis
    • SYNCHROON - log direct in op bestand, spoel en synchroniseer elke gebeurtenis
  • audit_log_file - Bestandsnaam die moet worden gebruikt om auditlogboeken op te slaan, standaard ${datadir}/audit.log. U kunt het relatieve bestandspad uit de datadir van uw database of het absolute bestandspad gebruiken.
  • audit_log_flush - Handig wanneer u het logboek moet doorspoelen, bijvoorbeeld in combinatie met logrotate
  • audit_log_buffer_size - Percona Audit Log registreert standaard sporen naar het standaard bestandslogboek. Deze variabele is handig wanneer audit_log_handler =FILE en audit_log_strategy =ASYNCHRONOUS of PERFORMANCE. Indien ingesteld, wordt het gebruikt om de grootte van de geheugenbuffer op te geven die wordt gebruikt voor logboekregistratie. Dit stelt u in staat om prestatieverlies te voorkomen wanneer het controleren van logboeken is ingeschakeld.
  • audit_log_format - Formaat om op te geven bij het opnemen of opslaan van informatie in uw auditlogbestand. Accepteert formaten als OUD/NIEUW (gebaseerd op XML-formaat), JSON en CSV. Dit is erg handig, vooral wanneer u later andere externe tools opneemt om uw controlelogboeken op te halen die specifieke indelingen ondersteunen.
  • audit_log_exclude_accounts /audit_log_include_accounts - Wordt gebruikt om de lijst met gebruikers te specificeren die u kunt opnemen of uitsluiten, afhankelijk van de parameternaam. Accepteert NULL anders een door komma's gescheiden lijst in de indeling [email protected] of 'gebruiker'@'host'. Deze variabelen sluiten elkaar uit, dus het moet worden uitgeschakeld (d.w.z. de waarde is NULL) een van de twee
  • audit_log_include_commands /audit_log_exclude_commands  - Wordt gebruikt om de lijst met opdrachten op te geven (NULL of door komma's gescheiden lijst) waarvoor wordt gefilterd op SQL-opdrachttype. Deze variabelen sluiten elkaar uit, dus het moet worden uitgeschakeld (d.w.z. de waarde is NULL) of de een of de ander. Ga als volgt te werk om de lijst met SQL-opdrachttypen in MySQL of Percona te krijgen:
    • schakel performance_schema=ON variabele in uw my.cnf in (vereist opnieuw opstarten van databaseserver)
    • Voer de volgende query uit: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 - wordt gebruikt om te specificeren om te filteren op databasenaam en in combinatie met audit_log_{include,exclude}_commands om de lijst met commando's te filteren om gedetailleerder te zijn bij het loggen tijdens het controleren van logs. Deze variabelen sluiten elkaar uit, dus het moet worden uitgeschakeld (d.w.z. de waarde is NULL) een van de twee.
  • audit_log_policy - Wordt gebruikt om aan te geven welke gebeurtenissen moeten worden gelogd. Technisch gezien kunt u deze variabele dynamisch instellen om in of uit te schakelen (stel de waarde in op GEEN) voor uw controlelogboekregistratie. Mogelijke waarden zijn:
    • ALLE - alle gebeurtenissen worden gelogd
    • LOGINS - alleen aanmeldingen worden geregistreerd
    • QUERIES - alleen zoekopdrachten worden geregistreerd
    • GEEN - er worden geen gebeurtenissen geregistreerd

De plug-in voor auditlogboeken beheren

Zoals vermeld, gaat het standaard logbestand naar ${data_dir}/audit.log en gebruikt het XML-formaat, net als in mijn voorbeeld hieronder:

[[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"

/>

Laten we nu de Percona Audit Log-plug-in gaan beheren in een reëel scenario. Laten we, geïnspireerd door het werk van Dani's blog van Percona, overwegen de volgende variabelen in my.cnf te wijzigen,

[[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

Laten we dan de volgende database en tabellen maken,

CREATE DATABASE s9s;

CREATE TABLE `audit_records` ( `id` int unsigned NOT NULL AUTO_INCREMENT,  `audit_record` json,   PRIMARY KEY (`id`) ) ENGINE=InnoDB;

Laten we dan A named pipe of FIFO in Linux gebruiken om logs te verzamelen die klaar zijn voor controle, maar die we later op een haalbare manier kunnen gebruiken.

$ 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

Vervolgens heb ik geprobeerd een benchmark uit te voeren met sysbench. Nu, met de volgende vermeldingen die ik heb,

mysql> select count(1) from audit_records\G

*************************** 1. row ***************************

count(1): 37856

1 row in set (0.11 sec)

Ik kan wat audits doen met JSON, wat het voor mij mogelijk maakt om audits en onderzoek of zelfs prestatie-analyse van mijn database uit te voeren. Bijvoorbeeld,

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)

Uw auditlogboeken samenvoegen met andere tools

Nu je de output van je audit logs kunt ontleden, kun je beginnen met het opnemen ervan in andere externe tools en beginnen met aggregeren met je huidige omgeving of technologiestack, zolang deze JSON leest of ondersteunt. U kunt bijvoorbeeld ELK (Elasticsearch, Logstash Kibana) gebruiken om uw logboeken te ontleden en te centraliseren. Je zou ook kunnen proberen om Graylog of Fluentd op te nemen. Aan de andere kant kunt u uw eigen viewer maken en deze opnemen in uw huidige softwareconfiguratie. Het gebruik van Percona Audit Log maakt deze dingen mogelijk om meer analyses uit te voeren met een hoge productiviteit en natuurlijk ook haalbaar en uitbreidbaar.


  1. Automatiseren Versienummer Ophalen uit .Dtsx-bestanden

  2. Arraywaarden samenvoegen/samenvoegen tijdens groeperen/aggregeren

  3. Hoe krijg ik tijd uit het DateTime-formaat in SQL?

  4. Het herhaalbare leesisolatieniveau