sql >> Databáze >  >> RDS >> MariaDB

Použití pluginu Percona Audit Log pro zabezpečení databáze

Proč potřebujete pro svou databázi používat modul auditu?

Audit v databázi se neodchyluje od svého významu, protože sdílí stejnou konotaci, tj. kontrolovat, zkoumat a vyhodnocovat takové databázové události/transakce, které jsou protokolovány nebo prováděny ve vaší databázi. Ve skutečnosti přidává více proveditelnosti pro databáze, zejména jako bezpečnostní prvek, protože chválí administrativní stránku, aby byla citlivá pro správu a zpracování dat. Zahrnuje odpovědnost a odpovědnost za správu dat.

Audit databáze vyžaduje, aby každá transakce (tj. DDL a DML) byla protokolována, aby bylo možné zaznamenávat trasování a získat úplný přehled o tom, co se děje během operací databáze. Tyto operace mohou vzít v úvahu:

  • Poskytuje možnost sledování a ladění za účelem zvýšení výkonu na straně aplikace
  • Dodržování zabezpečení a ochrany osobních údajů, jako jsou PCI DSS, HIPAA, GDPR atd. 
  • Poskytuje schopnost získat autonomii dat specifickou pro prostředí s více nájemci. To jim umožňuje provádět analýzu dat tak, aby rozlišovaly a filtrovaly transakce na základě citlivosti a soukromí z hlediska bezpečnosti a výkonu.
  • Podněcuje administrativní akce, aby zabránil uživatelům databáze v nevhodných akcích založených na vyšetřovací podezřelé aktivitě nebo omezených její rolí. To znamená, že například čtecí uživatelé budou mít povoleno pouze tahat data a pouze omezený přístup ke konkrétním databázím, za které jsou zodpovědní nebo s omezeným rozsahem v souladu s jejich pracovní rolí.

Co je to plugin Percona Audit Log?

Předchozí přístupy k auditování transakcí nebo událostí probíhajících ve vaší databázi mohou být obtížným přístupem. Povolení souboru obecného protokolu nebo použití protokolu pomalého dotazu. Není to dokonalý přístup, takže plugin protokolu auditu dokáže přidat větší flexibilitu a přizpůsobitelné parametry, aby zaplnil mezeru. Percona tvrdí, že jejich modul Audit Log Plugin je alternativou k MySQL Enterprise Audit. I když je to pravda, je zde upozornění, že plugin Percona Audit Log není pro Oracle MySQL k dispozici pro instalaci. Pro tento binární soubor neexistuje žádný tarball ke stažení, ale lze jej snadno nainstalovat pouhým zkopírováním existujícího souboru audit_log.so ze stávající instalace Percona Server nebo Percona XtraDB Cluster. Nejlepší je doporučit použít nebo zkopírovat existující audit_log.so stejné verze Percona Server s komunitní verzí MySQL. Pokud je tedy vaše cílová verze komunity MySQL 8.x, použijte také audit_log.so z verze Percona Server 8.x. Ukážeme vám, jak to udělat ve verzi komunity MySQL později na tomto blogu.

Plugin Percona Audit Log je samozřejmě open source a je k dispozici zdarma. Pokud tedy vaše podniková aplikace používá backendovou databázi, jako je Percona Server nebo vanilla MySQL, můžete použít tento plugin. MySQL Enterprise Audit je k dispozici pouze pro MySQL Enterprise Server a je spojen s cenou. Kromě toho Percona neustále aktualizuje a udržuje tento software a to je velká výhoda, jako kdyby byla k dispozici jakákoli významná verze z upstream MySQL. Percona bude také vydána na základě své hlavní verze, která ovlivní aktualizace a testované funkce i pro jejich zásuvný nástroj audit log. Jakákoli nekompatibilita s předchozími verzemi by tedy měla být také aktualizována, aby fungovala s nejnovější a bezpečnou verzí MySQL.

Plugin Percona Audit Log je označen jako jeden z bezpečnostních nástrojů, ale ujasněme si to znovu. Tento nástroj se používá pro auditování protokolů. Jeho jediným účelem je protokolovat stopy transakcí z vaší databáze. Neprovádí firewall ani neuplatňuje preventivní opatření k blokování konkrétních uživatelů. Tento nástroj je hlavně pro auditování protokolů a použití pro analýzu databázových transakcí.

Použití pluginu Percona Audit Log

V této části se podíváme na to, jak nainstalovat, používat a jak užitečný může být plugin zejména v situacích skutečného světa.

Instalace pluginu

Percona přichází s různými zdroji svých databázových binárních souborů. Jakmile správně nainstalujete databázový server, standardní instalace umístí zásuvný modul auditního protokolu sdílený-objekt do  /usr/lib64/mysql/plugin/audit_log.so. Instalaci pluginu jako způsob, jak jej povolit na serveru Percona/MySQL, lze provést pomocí následujících akcí níže. Tyto kroky se provádějí pomocí 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)

Potom jsou kroky následující:

  1. Nejprve ověřte, zda plugin existuje nebo ne

## Zkontrolujte, zda je plugin povolen nebo nainstalován

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. Nainstalujte plugin,

## Zkontrolujte, kde jsou umístěny pluginy

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

## Připravit a poté nainstalovat

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

Query OK, 0 rows affected (0.01 sec)
  1. Znovu to ověřte

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)

Instalace pluginu Percona Audit přes verzi komunity MySQL

Při instalaci na verze Oracle MySQL, jak jsme uvedli výše, vždy shodujte s verzí serveru Percona, ze které pochází soubor audit_log.so. Takže například níže mám následující verze MySQL,

nodeB $  mysqld --version

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

Můj server Percona je,

nodeA $ mysqld --version

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

Vše, co musíte udělat, je zkopírovat ze zdroje Percona na server, kde máte nainstalovaný MySQL Community Server.

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

Poté přejděte do /usr/lib64/mysql/plugin, pro který mají být umístěny pluginy.

[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

Vše ostatní můžete podle výše uvedených kroků pokračovat v instalaci nebo aktivaci pluginu Percona Audit Login pro komunitní server MySQL.

Konfigurace a správa pluginu Percona Audit Log

Percona Audit Log Plugin je velmi flexibilní nástroj, který je velmi konfigurovatelný nebo přizpůsobitelný, aby vyhovoval vašim požadavkům při protokolování databázových připojení nebo transakcí. Je to lineární implementace pro danou konfiguraci, takže i když je flexibilní pro přizpůsobení danými parametry, pouze tyto dané hodnoty budou protokolovány a auditovány po celou dobu běhu databáze a ve výchozím nastavení se to provádí asynchronně. Všechny proměnné parametrů v tomto pluginu jsou důležité, ale níže jsou nejdůležitější parametry, které můžete použít ke konfiguraci pluginu:

  • audit_log_strategy - Používá se k určení strategie protokolu auditu a když je audit_log_handler nastaven na FILE. což znamená, že jsou možné buď následující hodnoty: 
    • ASYNCHRONNÍ – (výchozí) protokolování pomocí vyrovnávací paměti, nezahazovat zprávy, pokud je vyrovnávací paměť plná
    • PERFORMANCE – protokolujte pomocí vyrovnávací paměti, zprávy zahazujte, pokud je vyrovnávací paměť plná
    • POLOSYNCHRONNÍ – přihlaste se přímo do souboru, nevyplachujte a nesynchronizujte každou událost
    • SYNCHRONNÍ – přihlaste se přímo do souboru, vyprázdněte a synchronizujte každou událost
  • audit_log_file - Název souboru, který se má použít k ukládání protokolů auditu, což je výchozí soubor ${datadir}/audit.log. Můžete použít relativní cestu k souboru z datadir vaší databáze nebo absolutní cestu k souboru.
  • audit_log_flush - Užitečné, když potřebujete propláchnout protokol, například když se používá v koordinaci s logrotate
  • audit_log_buffer_size - Ve výchozím nastavení Percona Audit Log zaznamenává trasování do výchozího protokolu souboru. Tato proměnná je užitečná, když audit_log_handler =FILE a audit_log_strategy =ASYNCHRONOUS nebo PERFORMANCE. Je-li nastaven, používá se k určení velikosti vyrovnávací paměti používané pro protokolování. To vám umožní vyhnout se zhoršení výkonu, když je povoleno auditování protokolů.
  • audit_log_format - Formát, který chcete určit při záznamu nebo ukládání informací do souboru protokolu auditu. Přijímá formáty jako STARÝ/NOVÝ (na základě formátu XML), JSON a CSV. To je velmi užitečné zejména tehdy, když je později začleníte do jiných externích nástrojů k získání protokolů auditu, které podporují konkrétní formáty.
  • audit_log_exclude_accounts /audit_log_include_accounts – Používá se k určení seznamu uživatelů, které můžete zahrnout nebo vyloučit podle názvu parametru. Přijímá hodnotu NULL, jinak seznam oddělený čárkami ve formátu [email protected] nebo 'user'@'host'. Tyto proměnné se vzájemně vylučují, takže musí být jedna nebo druhá deaktivována (tj. hodnota je NULL)
  • audit_log_include_commands /audit_log_exclude_commands  – Používá se k určení seznamu příkazů (buď seznam NULL nebo seznam oddělený čárkami), pro které se použije filtrování podle typu příkazu SQL. Tyto proměnné se vzájemně vylučují, takže musí být jedna nebo druhá deaktivována (tj. hodnota je NULL). Chcete-li získat seznam typů příkazů SQL v MySQL nebo Percona, proveďte následující:
    • povolte proměnnou performance_schema=ON ve vašem my.cnf (vyžaduje restart databázového serveru)
    • Spusťte následující dotaz:SELECT GROUP_CONCAT(SUBSTRING_INDEX(název, '/', -1) ORDER BY name) sql_statement FROM performance_schema.setup_instruments WHERE název LIKE "statement/sql/%"\G
  • audit_log_include_databases /audit_log_exclude_databases - používá se k určení filtrování podle názvu databáze a ve spojení s audit_log_{include,exclude}_commands k filtrování seznamu příkazů tak, aby byl podrobnější při protokolování během auditování protokolů. Tyto proměnné se vzájemně vylučují, takže musí být jedna nebo druhá deaktivována (tj. hodnota je NULL).
  • audit_log_policy - Používá se k určení, které události mají být protokolovány. Technicky můžete tuto proměnnou dynamicky nastavit tak, aby povolila nebo zakázala (nastavte hodnotu NONE) pro protokolování auditu. Možné hodnoty jsou:
    • VŠECHNY – všechny události budou protokolovány
    • PŘIHLÁŠENÍ – budou protokolována pouze přihlášení
    • DOTAZY – protokolovány budou pouze dotazy
    • ŽÁDNÉ – nebudou protokolovány žádné události

Správa pluginu Audit Log

Jak již bylo zmíněno, výchozí soubor protokolu jde do ${data_dir}/audit.log a používá formát XML stejně jako můj příklad níže:

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

/>

Nyní pojďme spravovat plugin Percona Audit Log ve scénáři reálného případu. Inspirováni prací Daniho blogu Percona, zvažte změnu následujících proměnných v 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

Poté vytvořte následující databázi a tabulky

CREATE DATABASE s9s;

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

Potom použijeme pojmenovanou rouru nebo FIFO v Linuxu ke shromažďování protokolů připravených k auditování, které však můžeme později použít.

$ 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

Potom jsem zkusil spustit benchmark pomocí sysbench. Nyní s následujícími položkami,

mysql> select count(1) from audit_records\G

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

count(1): 37856

1 row in set (0.11 sec)

Mohu provádět nějaké audity pomocí JSON, což mi umožňuje provádět audity a vyšetřování nebo dokonce analýzu výkonu mé databáze. Například,

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)

Agregujte své protokoly auditu s dalšími nástroji

Nyní, když jste schopni analyzovat výstup svých protokolů auditu, můžete je začít začleňovat do jiných externích nástrojů a začít agregovat s vaším aktuálním prostředím nebo technologickým zásobníkem, pokud čte nebo podporuje JSON. Například pomocí ELK (Elasticsearch, Logstash Kibana) k analýze a centralizaci vašich protokolů. Můžete také zkusit začlenit s Graylog nebo Fluentd. Na druhou stranu si můžete vytvořit svůj vlastní prohlížeč a začlenit jej do aktuálního nastavení softwaru. Použití Percona Audit Log umožňuje tyto věci provádět více analýz s vysokou produktivitou a samozřejmě také proveditelné a rozšiřitelné.


  1. Jak opravit běžné problémy s databází MySQL?

  2. Jak mohu provést FULL OUTER JOIN v MySQL?

  3. Vypočítejte časový rozdíl mezi dvěma řádky

  4. Spouštěč s názvem dynamického pole