Suivre l’activité de la base de données avec les journaux d’audit dans Azure Database pour MySQL - Serveur flexible

S’APPLIQUE À : Azure Database pour MySQL - Serveur flexible

Le serveur flexible Azure Database pour MySQL offre aux utilisateurs la possibilité de configurer des journaux d’audit. Les journaux d’audit peuvent être utilisés pour suivre l’activité au niveau de la base de données, y compris les événements relatifs aux connexions, à l’administration, au langage de description de données et au langage de manipulation de données. Ces types de journaux sont couramment utilisés à des fins de conformité.

Configurer l’enregistrement d’audit

Important

Nous vous recommandons de ne journaliser que les types d’événements et les utilisateurs nécessaires à des fins d’audit pour vous assurer que les performances de votre serveur ne seront pas lourdement impactées et qu’une quantité minimale de données sera collectée.

Par défaut, les journaux d’audit sont désactivés. Pour les activer, définissez le paramètre serveur audit_log_enabled sur ON (Activé). Vous pouvez configurer ce paramètre à l’aide du portail Azure ou d’Azure CLI.

Les autres paramètres que vous pouvez ajuster pour contrôler le comportement de la journalisation d’audit sont les suivants :

  • audit_log_events : contrôle les événements à enregistrer. Consultez le tableau ci-dessous pour des événements d’audit spécifiques.
  • audit_log_include_users: Utilisateurs MySQL à inclure pour la journalisation. La valeur par défaut de ce paramètre est vide, ce qui inclut tous les utilisateurs pour la journalisation. Il a une plus grande priorité que audit_log_exclude_users. La longueur maximale du paramètre est de 512 caractères. Par exemple, la valeur générique de dev* inclut tous les utilisateurs avec des entrées commençant par un mot clé dev comme « dev1,dev_user;dev_2 ». Un autre exemple d’entrée générique pour inclure l’utilisateur est *dev dans cet exemple, tous les utilisateurs se terminant par la valeur « dev » comme « stage_dev,prod_dev,user_dev » sont inclus dans les entrées du journal d’audit. En outre, l’utilisation d’un point d’interrogation (?) comme caractère générique est autorisée dans les modèles.
  • audit_log_exclude_users: utilisateurs MySQL à exclure de la journalisation. La longueur maximale du paramètre est de 512 caractères. Les entrées génériques pour l’utilisateur sont également acceptées pour exclure les utilisateurs dans les journaux d’audit. Par exemple, la valeur générique de stage* exclut tous les utilisateurs avec des entrées commençant par un mot clé stage comme « stage1,stage_user;stage_2 ». Un autre exemple d’entrée générique pour exclure l’utilisateur est *com dans cet exemple, tous les utilisateurs se terminant par la valeur com sont exclus des entrées du journal d’audit. En outre, l’utilisation d’un point d’interrogation (?) comme caractère générique est autorisée dans les modèles.

Remarque

audit_log_include_users a une priorité plus élevée que audit_log_exclude_users. Par exemple, si audit_log_include_users = demouser et audit_log_exclude_users = demouser, l’utilisateur sera inclus dans les journaux d’audit, car audit_log_include_users a une priorité plus élevée.

Event Description
CONNECTION - Lancement de la connexion
- Arrêt de la connexion
CONNECTION_V2 - Lancement de la connexion (réussite ou code d’erreur d’échec)
- Arrêt de la connexion
DML_SELECT Requêtes SELECT
DML_NONSELECT Requêtes INSERT/DELETE/UPDATE
DML DML = DML_SELECT + DML_NONSELECT
DDL Requêtes telles que « DROP DATABASE »
DCL Requêtes telles que « GRANT PERMISSION »
ADMIN Requêtes telles que « SHOW STATUS »
GENERAL Tout dans DML_SELECT, DML_NONSELECT, DML, DDL, DCL et ADMIN
TABLE_ACCESS - Instructions de lecture de table, telles que SELECT ou INSERT INTO... SELECT
- Instructions de suppression de table, telles que DELETE ou TRUNCATE TABLE
- Instructions d’insertion de table, telles que INSERT ou REPLACE
- Instructions de mise à jour de table, telles que UPDATE

Accéder aux journaux d’audit

Les journaux d’audit sont intégrés aux journaux de diagnostic Azure Monitor. Une fois que vous avez activé les journaux d’audit sur votre serveur flexible, vous pouvez les transmettre aux journaux Azure Monitor, à Azure Event Hubs ou au stockage Azure. Pour en savoir plus sur les paramètres de diagnostic, consultez la Documentation des journaux de diagnostic. Pour en savoir plus sur l’activation des paramètres de diagnostic dans le portail Azure, consultez l’article sur le portail des journaux d’audit.

Remarque

Les comptes de stockage Premium ne sont pas pris en charge si vous envoyez les journaux au stockage Azure par le biais des diagnostics et des paramètres.

Les sections suivantes décrivent la sortie des journaux d’audit MySQL en fonction du type d’événement. En fonction de la méthode de sortie, les champs inclus et l’ordre dans lequel ils apparaissent peuvent varier.

Connexion

Propriété Description
TenantId Votre ID d’abonné
SourceSystem Azure
TimeGenerated [UTC] Horodatage du moment où le journal a été enregistré en UTC
Type Type de journal. Toujours AzureDiagnostics
SubscriptionId GUID de l’abonnement auquel appartient le serveur
ResourceGroup Nom du groupe de ressources auquel le serveur appartient
ResourceProvider Nom du fournisseur de ressources. Toujours MICROSOFT.DBFORMYSQL
ResourceType Servers
ResourceId URI de ressource
Resource Nom du serveur en majuscules
Category MySqlAuditLogs
OperationName LogEvent
LogicalServerName_s Nom du serveur
event_class_s connection_log
event_subclass_s CONNECT, DISCONNECT, CHANGE USER
connection_id_d ID de connexion unique généré par MySQL
host_s Vide
ip_s Adresse IP du client qui se connecte à MySQL
user_s Nom de l’utilisateur qui exécute la requête
db_s Nom de la base de données connectée
\_ResourceId URI de ressource
status_d Le code d’erreur de connexion pour l’événement CONNECTIONS_V2.

Général

Le schéma ci-dessous s’applique aux types d’événements GENERAL, DML_SELECT, DML_NONSELECT, DML, DDL, DCL et ADMIN.

Notes

Pour sql_text_s, le journal est tronqué s’il dépasse 2 048 caractères.

Propriété Description
TenantId Votre ID d’abonné
SourceSystem Azure
TimeGenerated [UTC] Horodatage du moment où le journal a été enregistré en UTC
Type Type de journal. Toujours AzureDiagnostics
SubscriptionId GUID de l’abonnement auquel appartient le serveur
ResourceGroup Nom du groupe de ressources auquel le serveur appartient
ResourceProvider Nom du fournisseur de ressources. Toujours MICROSOFT.DBFORMYSQL
ResourceType Servers
ResourceId URI de ressource
Resource Nom du serveur en majuscules
Category MySqlAuditLogs
OperationName LogEvent
LogicalServerName_s Nom du serveur
event_class_s general_log
event_subclass_s LOG, ERROR, RESULT (uniquement disponible pour MySQL 5.6)
event_time Heure de début de la requête dans l’horodatage UTC
error_code_d Code d’erreur en cas d’échec de la requête. 0 signifie aucune erreur
thread_id_d ID du thread qui a exécuté la requête
host_s Vide
ip_s Adresse IP du client qui se connecte à MySQL
user_s Nom de l’utilisateur qui exécute la requête
sql_text_s Texte de la requête complète
\_ResourceId URI de ressource

Accès à la table

Notes

Pour sql_text_s, le journal est tronqué s’il dépasse 2 048 caractères.

Propriété Description
TenantId Votre ID d’abonné
SourceSystem Azure
TimeGenerated [UTC] Horodatage du moment où le journal a été enregistré en UTC
Type Type de journal. Toujours AzureDiagnostics
SubscriptionId GUID de l’abonnement auquel appartient le serveur
ResourceGroup Nom du groupe de ressources auquel le serveur appartient
ResourceProvider Nom du fournisseur de ressources. Toujours MICROSOFT.DBFORMYSQL
ResourceType Servers
ResourceId URI de ressource
Resource Nom du serveur en majuscules
Category MySqlAuditLogs
OperationName LogEvent
LogicalServerName_s Nom du serveur
event_class_s table_access_log
event_subclass_s READ, INSERT, UPDATE ou DELETE
connection_id_d ID de connexion unique généré par MySQL
db_s Nom de la base de données sollicitée
table_s Nom de la table sollicitée
sql_text_s Texte de la requête complète
\_ResourceId URI de ressource

Analyser les journaux dans Azure Monitor

Une fois vos journaux d’audit dirigés vers les journaux Azure Monitor par le biais des journaux de diagnostic, vous pouvez effectuer une analyse plus poussée de vos événements audités. Voici quelques exemples de requêtes pour vous aider à commencer. Veillez à mettre à jour les exemples ci-dessous avec le nom de votre serveur.

  • Lister les événements généraux (GENERAL) sur un serveur spécifique

    AzureDiagnostics
    | where Resource  == '<your server name>' //Server name must be in Upper case
    | where Category == 'MySqlAuditLogs' and event_class_s == "general_log"
    | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s
    | order by TimeGenerated asc nulls last
    
  • Répertorie les événements CONNECTION_V2 sur un serveur particulier, la colonne status_d indique le code d’erreur de connexion cliente rencontré par l’application cliente lors de la connexion.

    AzureDiagnostics
    | where Resource  == '<your server name>' //Server name must be in Upper case
    | where Category == 'MySqlAuditLogs' and event_subclass_s == "CONNECT"
    | project TimeGenerated, Resource, event_class_s, event_subclass_s, user_s, ip_s, status_d
    | order by TimeGenerated asc nulls last
    
  • Lister les événements de connexion (CONNECTION) sur un serveur spécifique

    AzureDiagnostics
    | where Resource  == '<your server name>' //Server name must be in Upper case
    | where Category == 'MySqlAuditLogs' and event_class_s == "connection_log"
    | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s
    | order by TimeGenerated asc nulls last
    
  • Récapituler les événements audités sur un serveur spécifique

    AzureDiagnostics
    | where Resource  == '<your server name>' //Server name must be in Upper case
    | where Category == 'MySqlAuditLogs'
    | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s
    | summarize count() by event_class_s, event_subclass_s, user_s, ip_s
    
  • Représenter sous forme de graphe la distribution des types d’événements d’audit sur un serveur spécifique :

    AzureDiagnostics
    | where Resource  == '<your server name>' //Server name must be in Upper case
    | where Category == 'MySqlAuditLogs'
    | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s
    | summarize count() by Resource, bin(TimeGenerated, 5m)
    | render timechart
    
  • Répertorie les événements audités sur toutes les instances de serveur flexible Azure Database pour MySQL avec les journaux de diagnostic activés pour les journaux d’audit

    AzureDiagnostics
    | where Category == 'MySqlAuditLogs'
    | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s
    | order by TimeGenerated asc nulls last
    

Étapes suivantes