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é queaudit_log_exclude_users
. La longueur maximale du paramètre est de 512 caractères. Par exemple, la valeur générique dedev*
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 destage*
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 valeurcom
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
- En savoir plus sur les journaux des requêtes lentes
- Configurer l’audit