sql >> Databasteknik >  >> RDS >> MariaDB

Använda Percona Audit Log Plugin för databassäkerhet

Varför behöver du använda en granskningsplugin för din databas?

Revision i en databas avviker inte från dess innebörd eftersom den delar samma konnotation, dvs. att inspektera, undersöka och utvärdera för sådana databashändelser/transaktioner som loggas eller utförs i din databas. Det lägger faktiskt till mer genomförbarhet för databaser, särskilt som en säkerhetsfunktion, eftersom det lovordar den administrativa sidan att vara känslig för att hantera och bearbeta data. Den omfattar ansvaret och ansvarsskyldigheten för datahantering.

Databasrevision kräver att för varje transaktion (dvs. DDL och DML) måste loggas för att registrera spår och få full överblick över vad som händer under databasoperationer. Dessa operationer kan ta hänsyn till:

  • Ger möjlighet att övervaka och felsöka för att öka prestandan på applikationssidan
  • Säkerhet och efterlevnad av datasekretess som PCI DSS, HIPAA, GDPR, etc. 
  • Ger möjlighet att ta dataautonomi specifik för miljöer med flera hyresrätter. Detta gör att de kan ta dataanalys för att differentiera och filtrera transaktioner baserat på känslighet och integritet för säkerhets- och prestandaöverväganden.
  • För administrativa åtgärder för att förhindra databasanvändare från olämpliga åtgärder baserade på misstänkt undersökande aktivitet eller begränsad av dess roll. Detta innebär att läsanvändare, till exempel, endast ska tillåtas att hämta data och endast begränsad tillgång till specifika databaser som de endast ansvarar för eller med begränsad omfattning i enlighet med deras jobbroll.

Vad är Percona Audit Log Plugin?

Tidigare tillvägagångssätt för att granska transaktioner eller händelser som körs i din databas kan vara en rejäl metod. Aktiverar allmän loggfil eller antingen med långsam frågelogg. Det är inte ett perfekt tillvägagångssätt så granskningsloggpluginen lyckas lägga till mer flexibilitet och anpassningsbara parametrar för att fylla upp luckan. Percona hävdar att deras Audit Log Plugin är ett alternativ till MySQL Enterprise Audit. Även om det är sant, finns det en varning här att Perconas Audit Log Plugin inte är tillgänglig för Oracles MySQL för installation. Det finns ingen nedladdningsbar tarball för denna binära fil men den är lätt att installera genom att bara kopiera en befintlig audit_log.so-fil från en befintlig Percona Server eller Percona XtraDB Cluster-installation. Bäst att rekommendera att använda eller kopiera en befintlig audit_log.so av samma version av Percona Server med MySQL-gemenskapsversionen också. Så om din målversion av MySQL Community är av 8.x, använd sedan audit_log.so från en Percona Server 8.x-version också. Vi kommer att visa dig hur du gör detta på en MySQL-gemenskapsversion senare på den här bloggen.

Percona Audit Log Plugin är naturligtvis öppen källkod och den är tillgänglig för gratis användning. Så om din företagsapplikation använder en backend-databas som Percona Server eller vanilla MySQL, kan du använda detta plugin. MySQL Enterprise Audit är endast tillgängligt för MySQL Enterprise Server och det kommer med ett pris. Dessutom uppdaterar och underhåller Percona ständigt denna mjukvara och detta kommer som en stor fördel som om någon större utgåva från MySQL uppströms är tillgänglig. Percona kommer också att släppa baserat på sin huvudversion och det påverkar även uppdateringar och testade funktioner för deras plugin-verktyg för revisionslogg. Så all inkompatibilitet från dess tidigare versioner ska också uppdateras för att fungera med den senaste och säkraste versionen av MySQL.

Percona Audit Log Plugin är taggad som ett av ett säkerhetsverktyg men låt oss förtydliga detta igen. Det här verktyget används för att granska loggar. Det enda syftet är att logga spår av transaktioner från din databas. Det gör inte brandvägg eller tillämpar inte förebyggande åtgärder för att blockera specifika användare. Det här verktyget är främst avsett för granskning av loggar och för databastransaktionsanalys.

Använda Percona Audit Log Plugin

I det här avsnittet kommer vi att gå över hur man installerar, använder och hur fördelaktigt plugin-programmet kan vara, särskilt i verkliga situationer.

Installera insticksprogrammet

Percona kommer med olika källor för deras binära databasfiler. När du väl har installerat databasservern korrekt kommer standardinstallationen att placera insticksprogrammet för granskningslogg shared-object i /usr/lib64/mysql/plugin/audit_log.so. Installation av plugin som ett sätt att aktivera det inom Percona/MySQL-servern kan göras med följande åtgärder nedan. Dessa steg görs med 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)

Då är stegen som följer:

  1. Verifiera först om plugin-programmet finns eller inte

## Kontrollera om plugin-programmet är aktiverat eller installerat

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. Installera plugin-programmet,

## Kontrollera var plugin-programmen finns

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 och sedan installera

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

Query OK, 0 rows affected (0.01 sec)
  1. Verifiera 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)

Installera Percona Audit Plugin över MySQL-gemenskapsversionen

När du installerar på Oracle MySQL-versioner, som vi har nämnt ovan, ska du alltid matcha den version av Percona Server där filen audit_log.so kom ifrån. Så till exempel har jag följande versioner av MySQL nedan,

nodeB $  mysqld --version

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

Men min Percona Server är,

nodeA $ mysqld --version

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

Allt du behöver göra är att kopiera från Percona-källan till servern där du har MySQL Community Server installerad.

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

Flytta sedan till /usr/lib64/mysql/plugin som plugins ska finnas för.

[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

Allt resten, du kan följa stegen enligt ovan för att fortsätta installera eller aktivera Percona Audit Login Plugin för MySQL Community Server.

Konfiguration och hantering av Percona Audit Log Plugin

Percona Audit Log Plugin är ett mycket flexibelt verktyg som är mycket konfigurerbart eller anpassningsbart för att tillgodose dina krav när du loggar dina databasanslutningar eller transaktioner. Det är en linjär modeimplementering för dess givna konfiguration, så även om den är flexibel för att anpassas av dess givna parametrar, ska endast de givna värdena loggas och granskas under hela tiden din databas körs och det görs asynkront som standard. Alla parametervariabler i detta plugin är viktiga men nedan är de viktigaste parametrarna som du kan använda för att konfigurera plugin:

  • audit_log_strategy - Används för att specificera granskningsloggstrategin och när audit_log_handler är satt till FILE. vilket är antingen följande värden är möjliga: 
    • ASYNKRON - (standard) logg med minnesbuffert, släpp inte meddelanden om bufferten är full
    • PRESTANDA - logga med minnesbuffert, släpp meddelanden om bufferten är full
    • HALVSYNKRON - logga direkt till filen, spola inte och synkronisera varje händelse
    • SYNKRONT - logga direkt till fil, spola och synkronisera varje händelse
  • audit_log_file - Filnamn som ska användas för att lagra granskningsloggar, vilket som standard är filen ${datadir}/audit.log. Du kan använda relativ filsökväg från datakatalogen för din databas eller den absoluta sökvägen.
  • audit_log_flush - Användbart när du behöver spola stocken som att användas i samordning med logrotate
  • audit_log_buffer_size - Som standard registrerar Percona Audit Log spår till standardfilloggen. Denna variabel är användbar när audit_log_handler =FIL och audit_log_strategy =ASYNCHRONOUS eller PERFORMANCE. När den är inställd används den för att ange storleken på minnesbufferten som används för loggning. Detta gör att du kan undvika försämring av prestandastraff när granskningsloggar är aktiverade.
  • audit_log_format - Format för att specificera när du spelar in eller sparar information till din granskningsloggfil. Accepterar format som GAMLA/NYA (baserat på XML-format), JSON och CSV. Detta är mycket användbart, särskilt när du senare integrerar med andra externa verktyg för att hämta dina granskningsloggar som stöder specifika format.
  • audit_log_exclude_accounts /audit_log_include_accounts - Används för att specificera listan över användare som du kan inkludera eller exkludera respektive dess paramnamn. Accepterar NULL annars en kommaseparerad lista i formatet [email protected] eller 'user'@'host'. Dessa variabler är ömsesidigt uteslutande så de måste avaktiveras (dvs. värdet är NULL) den ena eller den andra
  • audit_log_include_commands /audit_log_exclude_commands  – Används för att ange listan med kommandon (antingen NULL eller kommaseparerad lista) för vilka filtrering efter SQL-kommandotyp tillämpas. Dessa variabler är ömsesidigt uteslutande så de måste vara inställda (dvs värdet är NULL) den ena eller den andra. För att få listan över SQL-kommandotyper i MySQL eller Percona, gör följande:
    • aktivera performance_schema=ON-variabeln i din my.cnf (kräver omstart av databasserver)
    • Kör följande fråga: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 - används för att specificera att filtrera efter databasnamn och med koppling till audit_log_{include,exclude}_kommandon för att filtrera listan med kommandon så att den blir mer detaljerad vid loggning under granskningsloggar. Dessa variabler är ömsesidigt uteslutande så de måste vara inställda (dvs. värdet är NULL) den ena eller den andra.
  • audit_log_policy - Används för att ange vilka händelser som ska loggas. Tekniskt sett kan du ställa in den här variabeln dynamiskt för att aktivera eller inaktivera (ställ värde till INGEN) för din granskningsloggning. Möjliga värden är:
    • ALLA - alla händelser kommer att loggas
    • LOGGA IN - endast inloggningar kommer att loggas
    • FRÅGOR - endast frågor kommer att loggas
    • INGEN - inga händelser kommer att loggas

Hantera insticksprogrammet Audit Log

Som nämnt går standardloggfilen till ${data_dir}/audit.log och använder XML-format precis som mitt exempel nedan:

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

/>

Låt oss nu hantera Percona Audit Log Plugin i ett verkligt scenario. Inspirerad av arbetet med Danis blogg om Percona, låt oss överväga att ändra följande 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

Låt oss sedan skapa följande databas och tabeller,

CREATE DATABASE s9s;

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

Låt oss sedan använda A named pipe eller FIFO i Linux för att samla in loggar som är redo för granskning men som vi senare kan använda.

$ 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

Sedan försökte jag köra ett benchmark med sysbench. Nu, med följande poster jag har,

mysql> select count(1) from audit_records\G

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

count(1): 37856

1 row in set (0.11 sec)

Jag kan göra en del granskning med JSON vilket gör det möjligt för mig att göra revision och undersökning eller till och med prestandaanalys av min databas. Till exempel,

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)

Aggregera dina granskningsloggar med andra verktyg

Nu när du kan analysera utdata från dina granskningsloggar kan du börja integrera den i andra externa verktyg och börja aggregera med din nuvarande miljö eller teknikstack så länge den läser eller stöder JSON. Använd till exempel ELK (Elasticsearch, Logstash Kibana) för att analysera och centralisera dina loggar. Du kan också försöka integrera med Graylog eller Fluentd. Å andra sidan kan du skapa din egen visningsprogram och integrera med din nuvarande programvaruinstallation. Att använda Percona Audit Log gör dessa saker möjliga att göra fler analyser med hög produktivitet och naturligtvis också genomförbara och utbyggbara.


  1. Bindande variabel till tabellnamn med cx_Oracle

  2. Hur man säkerhetskopierar eller skapar en ny tabell från befintlig SQL Server-tabell i SQL Server - SQL Server / TSQL Tutorial Del 105

  3. Hur importerar man CSV-fildata till en PostgreSQL-tabell?

  4. N:te maxlön i Oracle