MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

Utilisation du plug-in Percona Audit Log pour la sécurité de la base de données

Pourquoi avez-vous besoin d'utiliser un plugin d'audit pour votre base de données ?

L'audit dans une base de données ne s'écarte pas de sa signification car il partage la même connotation, c'est-à-dire inspecter, examiner et évaluer les événements/transactions de base de données qui sont enregistrés ou exécutés dans votre base de données. Cela ajoute en fait plus de faisabilité pour les bases de données, en particulier en tant que fonctionnalité de sécurité, car il recommande au côté administratif d'être sensible pour la gestion et le traitement des données. Il englobe la responsabilité et l'obligation de rendre compte de la gestion des données.

L'audit de la base de données nécessite que chaque transaction (c'est-à-dire les DDL et les DML) soit enregistrée afin d'enregistrer des traces et d'obtenir une vue d'ensemble complète de ce qui se passe pendant les opérations de la base de données. Ces opérations peuvent prendre les considérations :

  • Fournit la capacité de surveiller et de déboguer afin d'augmenter les performances côté application
  • Conformité à la sécurité et à la confidentialité des données telles que PCI DSS, HIPAA, RGPD, etc. 
  • Fournit la capacité de prendre l'autonomie des données spécifique aux environnements multi-locataires. Cela leur permet d'analyser les données afin de différencier et de filtrer les transactions en fonction de la sensibilité et de la confidentialité pour des raisons de sécurité et de performances.
  • Conduit les actions administratives pour empêcher les utilisateurs de la base de données d'effectuer des actions inappropriées basées sur une activité suspecte d'investigation ou limitées par son rôle. Cela signifie que les utilisateurs en lecture, par exemple, ne sont autorisés qu'à extraire des données et qu'un accès limité à des bases de données spécifiques dont ils sont uniquement responsables ou avec une portée limitée en fonction de leur fonction.

Qu'est-ce que le plug-in de journal d'audit Percona ?

Les approches précédentes sur l'audit des transactions ou des événements exécutés dans votre base de données peuvent être une approche lourde. Activer le fichier journal général ou utiliser le journal des requêtes lentes. Ce n'est pas une approche parfaite, donc le plug-in de journal d'audit parvient à ajouter plus de flexibilité et des paramètres personnalisables pour combler le vide. Percona affirme que son plugin de journal d'audit est une alternative à MySQL Enterprise Audit. Bien que cela soit vrai, il y a une mise en garde ici que le plug-in de journal d'audit de Percona n'est pas disponible pour MySQL d'Oracle pour l'installation. Il n'y a pas d'archive téléchargeable pour ce binaire, mais il est facile à installer en copiant simplement un fichier audit_log.so existant à partir d'une installation Percona Server ou Percona XtraDB Cluster existante. Il est préférable de recommander d'utiliser ou de copier un audit_log.so existant de la même version de Percona Server avec la version de la communauté MySQL également. Donc, si votre version cible de la communauté MySQL est 8.x, utilisez également audit_log.so à partir d'une version 8.x de Percona Server. Nous vous montrerons comment faire cela sur une version de la communauté MySQL plus tard sur ce blog.

Le plugin Percona Audit Log est bien sûr open-source et il est disponible gratuitement. Donc, si votre application d'entreprise utilise une base de données principale telle que Percona Server ou MySQL vanille, vous pouvez utiliser ce plugin. MySQL Enterprise Audit est uniquement disponible pour MySQL Enterprise Server et cela a un prix. De plus, Percona met constamment à jour et maintient ce logiciel, ce qui constitue un avantage majeur, comme si une version majeure de MySQL en amont était disponible. Percona publiera également en fonction de sa version majeure et cela affectera également les mises à jour et les fonctionnalités testées pour leur outil de plug-in de journal d'audit. Ainsi, toute incompatibilité de ses versions précédentes doit également être mise à jour pour fonctionner avec la version la plus récente et la plus sécurisée de MySQL.

Le plug-in Percona Audit Log est étiqueté comme l'un des outils de sécurité, mais clarifions cela à nouveau. Cet outil est utilisé pour l'audit des journaux. Son seul but est de consigner les traces des transactions de votre base de données. Il ne fait pas de pare-feu ni n'applique de mesures préventives pour bloquer des utilisateurs spécifiques. Cet outil est principalement destiné à l'audit des journaux et à l'analyse des transactions de la base de données.

Utilisation du plug-in de journal d'audit Percona

Dans cette section, nous verrons comment installer, utiliser et à quel point le plugin peut être bénéfique, en particulier dans des situations réelles.

Installation du plugin

Percona est livré avec diverses sources pour leurs binaires de base de données. Une fois que vous avez correctement installé le serveur de base de données, l'installation standard placera l'objet partagé du plug-in de journal d'audit dans /usr/lib64/mysql/plugin/audit_log.so. L'installation du plugin comme moyen de l'activer dans le serveur Percona/MySQL peut être effectuée avec les actions suivantes ci-dessous. Cette étape est effectuée à l'aide de 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)

Ensuite, les étapes sont les suivantes :

  1. Vérifiez d'abord si le plugin existe ou non

## Vérifiez si le plugin est activé ou installé

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. Installer le plugin,

## Vérifiez où se trouvent les plugins

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

## Prêt puis installez

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

Query OK, 0 rows affected (0.01 sec)
  1. Vérifiez-le à nouveau

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 du plug-in d'audit Percona sur la version communautaire MySQL

Lors de l'installation sur des versions d'Oracle MySQL, comme nous l'avons mentionné ci-dessus, faites toujours correspondre la version de Percona Server d'où provient le fichier audit_log.so. Ainsi, par exemple, j'ai les versions suivantes de MySQL ci-dessous,

nodeB $  mysqld --version

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

Alors que mon serveur Percona est,

nodeA $ mysqld --version

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

Tout ce que vous avez à faire est de copier depuis la source Percona vers le serveur sur lequel MySQL Community Server est installé.

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

Déplacez-vous ensuite vers /usr/lib64/mysql/plugin pour lequel les plugins doivent être localisés.

[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

Tout le reste, vous pouvez suivre les étapes indiquées ci-dessus pour continuer à installer ou activer le plug-in Percona Audit Login pour MySQL Community Server.

Configuration et gestion du plug-in de journal d'audit Percona

Percona Audit Log Plugin est un outil très flexible qui est très configurable ou personnalisable pour répondre à vos besoins lorsque vous enregistrez vos connexions ou transactions à la base de données. Il s'agit d'une implémentation de mode linéaire pour sa configuration donnée, donc même si elle est flexible pour être personnalisée par ses paramètres donnés, seules ces valeurs données doivent être enregistrées et auditées pendant toute la durée d'exécution de votre base de données et cela se fait de manière asynchrone par défaut. Toutes les variables de paramètre de ce plugin sont importantes, mais voici les paramètres les plus importants que vous pouvez utiliser pour configurer le plugin :

  • audit_log_strategy - Utilisé pour spécifier la stratégie de journal d'audit et lorsque audit_log_handler est défini sur FILE. qui est soit les valeurs suivantes sont possibles : 
    • ASYNCHRONE - (par défaut) journal utilisant la mémoire tampon, ne supprime pas les messages si la mémoire tampon est pleine
    • PERFORMANCE - journaliser en utilisant la mémoire tampon, supprimer les messages si la mémoire tampon est pleine
    • SEMI-SYNCHRONOUS - connectez-vous directement au fichier, ne videz pas et synchronisez chaque événement
    • SYNCHRONOUS - se connecter directement au fichier, vider et synchroniser chaque événement
  • audit_log_file - Nom de fichier à utiliser pour stocker les journaux d'audit, qui est par défaut le fichier ${datadir}/audit.log. Vous pouvez utiliser le chemin de fichier relatif à partir du répertoire de données de votre base de données ou le chemin de fichier absolu.
  • audit_log_flush - Utile lorsque vous devez vider le journal, par exemple en cas d'utilisation en coordination avec logrotate
  • audit_log_buffer_size - Par défaut, Percona Audit Log enregistre les traces dans le fichier journal par défaut. Cette variable est utile lorsque audit_log_handler =FILE et audit_log_strategy =ASYNCHRONOUS ou PERFORMANCE. Lorsqu'il est défini, il est utilisé pour spécifier la taille de la mémoire tampon utilisée pour la journalisation. Cela vous permet d'éviter la dégradation des performances lorsque l'audit des journaux est activé.
  • audit_log_format - Format à spécifier lors de l'enregistrement ou de la sauvegarde des informations dans votre fichier journal d'audit. Accepte les formats ANCIEN/NOUVEAU (basé sur le format XML), JSON et CSV. Ceci est très utile, en particulier lorsque vous intégrez ultérieurement d'autres outils externes pour extraire vos journaux d'audit prenant en charge des formats spécifiques.
  • audit_log_exclude_accounts /audit_log_include_accounts - Utilisé pour spécifier la liste des utilisateurs que vous pouvez inclure ou exclure en fonction de son nom de paramètre. Accepte NULL sinon une liste séparée par des virgules au format [email protected] ou 'user'@'host'. Ces variables sont mutuellement exclusives, elles doivent donc être non définies (c'est-à-dire que la valeur est NULL) l'une ou l'autre
  • audit_log_include_commands /audit_log_exclude_commands  :utilisé pour spécifier la liste des commandes (soit NULL, soit une liste séparée par des virgules) pour lesquelles le filtrage par type de commande SQL est appliqué. Ces variables sont mutuellement exclusives, elles doivent donc être désactivées (c'est-à-dire que la valeur est NULL) l'une ou l'autre. Pour obtenir la liste des types de commandes SQL dans MySQL ou Percona, procédez comme suit :
    • activer la variable performance_schema=ON dans votre my.cnf (nécessite un redémarrage du serveur de base de données)
    • Exécutez la requête suivante :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 - utilisé pour spécifier de filtrer par nom de base de données et conjointement avec audit_log_{include,exclude}_commands pour filtrer la liste des commandes afin d'être plus granulaire lors de la journalisation pendant l'audit des journaux. Ces variables sont mutuellement exclusives, elles doivent donc être non définies (c'est-à-dire que la valeur est NULL) l'une ou l'autre.
  • audit_log_policy - Utilisé pour spécifier quels événements doivent être enregistrés. Techniquement, vous pouvez définir cette variable dynamiquement pour activer ou désactiver (définir la valeur sur NONE) pour votre journalisation d'audit. Les valeurs possibles sont :
    • ALL - tous les événements seront enregistrés
    • CONNEXIONS - seules les connexions seront enregistrées
    • QUERIES - seules les requêtes seront enregistrées
    • AUCUN - aucun événement ne sera enregistré

Gestion du plug-in de journal d'audit

Comme mentionné, le fichier journal par défaut va à ${data_dir}/audit.log et utilise le format XML comme dans mon exemple ci-dessous :

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

/>

Maintenant, gérons le plug-in Percona Audit Log dans un cas réel. Inspiré par le travail du blog de Dani de Percona, envisageons de changer les variables suivantes dans 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

Créons ensuite la base de données et les tables suivantes,

CREATE DATABASE s9s;

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

Utilisons ensuite un canal nommé A ou FIFO sous Linux pour collecter des journaux prêts pour l'audit mais que nous pourrons utiliser ultérieurement de manière pratique.

$ 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

Ensuite, j'ai essayé d'exécuter un benchmark en utilisant sysbench. Maintenant, avec les entrées suivantes que j'ai,

mysql> select count(1) from audit_records\G

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

count(1): 37856

1 row in set (0.11 sec)

Je peux effectuer des audits à l'aide de JSON, ce qui me permet d'effectuer des audits et des enquêtes ou même des analyses de performances de ma base de données. Par exemple,

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)

Agrégez vos journaux d'audit avec d'autres outils

Maintenant que vous êtes en mesure d'analyser la sortie de vos journaux d'audit, vous pouvez commencer à l'incorporer à d'autres outils externes et commencer à l'agréger avec votre environnement ou pile technologique actuel tant qu'il lit ou prend en charge JSON. Par exemple, en utilisant ELK (Elasticsearch, Logstash Kibana) pour analyser et centraliser vos journaux. Vous pouvez également essayer d'intégrer Graylog ou Fluentd. D'autre part, vous pouvez créer votre propre visionneuse et l'intégrer à votre configuration logicielle actuelle. L'utilisation de Percona Audit Log rend ces choses faisables pour faire plus d'analyses avec une productivité élevée et bien sûr aussi faisable et extensible.