Journaux d’audit dans Azure Database pour MySQL
S’APPLIQUE À : Azure Database pour MySQL - Serveur unique
Important
Le serveur unique Azure Database pour MySQL est en voie de mise hors service. Nous vous conseillons vivement de procéder à une mise à niveau vers Azure Database pour MySQL – Serveur flexible. Pour obtenir plus d’informations sur la migration vers Azure Database pour MySQL – Serveur flexible, consultez Qu’en est-il du Serveur unique Azure Database pour MySQL ?
Dans Azure Database pour MySQL, le journal d’audit est disponible pour les utilisateurs. Le journal d’audit peut être utilisé pour suivre l’activité au niveau de la base de données et est couramment utilisé à 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, le journal d’audit est désactivé. Pour l’activer, affectez la valeur ON à audit_log_enabled
.
Les autres paramètres que vous pouvez ajuster incluent :
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.audit_log_exclude_users
: utilisateurs MySQL à exclure de la journalisation. La longueur maximale du paramètre est de 512 caractères.
Notes
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 (réussite ou échec) - Réauthentification d’utilisateur avec un autre utilisateur/mot de passe en cours de session - 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 |
- Disponible pour MySQL 5.7 et MySQL 8.0 - 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 MySQL, vous pouvez les transmettre vers des journaux Azure Monitor, des Event Hubs ou Stockage Azure. Pour en savoir plus sur l’activation des journaux de diagnostic dans le portail Azure, consultez l’article sur le portail de journal d’audit.
Notes
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.
Schémas des journaux de diagnostic
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 |
Category |
MySqlAuditLogs |
OperationName |
LogEvent |
LogicalServerName_s |
Nom du serveur |
event_class_s |
connection_log |
event_subclass_s |
CONNECT , DISCONNECT , CHANGE USER (uniquement disponible pour MySQL 5.7) |
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 |
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
, 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 |
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
Les journaux d’accès à la table sont uniquement des sorties pour MySQL 5.7.
Pour sql_text
, 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 |
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 LogicalServerName_s == '<your server name>' | where Category == 'MySqlAuditLogs' and event_class_s == "general_log" | project TimeGenerated, LogicalServerName_s, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s | order by TimeGenerated asc nulls last
Lister les événements de connexion (CONNECTION) sur un serveur spécifique
AzureDiagnostics | where LogicalServerName_s == '<your server name>' | where Category == 'MySqlAuditLogs' and event_class_s == "connection_log" | project TimeGenerated, LogicalServerName_s, 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 LogicalServerName_s == '<your server name>' | where Category == 'MySqlAuditLogs' | project TimeGenerated, LogicalServerName_s, 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 LogicalServerName_s == '<your server name>' | where Category == 'MySqlAuditLogs' | project TimeGenerated, LogicalServerName_s, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s | summarize count() by LogicalServerName_s, bin(TimeGenerated, 5m) | render timechart
Lister les événements audités de tous les serveurs MySQL sur lesquels les journaux de diagnostic sont activés pour les journaux d’audit :
AzureDiagnostics | where Category == 'MySqlAuditLogs' | project TimeGenerated, LogicalServerName_s, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s | order by TimeGenerated asc nulls last