Partager via


Gérer l’audit de base de données SQL avec l’API REST

S’applique à :Base de données SQL dans Microsoft Fabric

Vous pouvez utiliser l’API REST Fabric pour afficher et configurer les paramètres d’audit de base de données SQL par programmation. L’API des paramètres d’audit SQL est une API au niveau de la base de données qui fonctionne sur des bases de données SQL individuelles. En combinant l’API avec des scripts PowerShell, vous pouvez gérer l’audit de manière cohérente sur toutes les bases de données d’un espace de travail.

Cet article montre comment utiliser PowerShell et l’API REST des paramètres d’audit SQL au niveau de la base de données pour récupérer et mettre à jour les paramètres d’audit pour les bases de données SQL dans un espace de travail Fabric.

Prerequisites

Audit des points de terminaison d’API REST

L’API des paramètres d’audit SQL fournit deux opérations pour la gestion de l’audit sur des bases de données SQL individuelles :

Operation Méthode URI
Obtenir les paramètres d’audit SQL GET https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/sqlDatabases/{sqlDatabaseId}/settings/sqlAudit
Mettre à jour les paramètres d’audit SQL PATCH https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/sqlDatabases/{sqlDatabaseId}/settings/sqlAudit

L’opération Get nécessite une étendue déléguée SQLDatabase.Read.All, SQLDatabase.ReadWrite.All, Item.Read.All, ou Item.ReadWrite.All. L'opération de mise à jour requiert une portée SQLDatabase.ReadWrite.All ou Item.ReadWrite.All déléguée. Les deux opérations prennent en charge les identités utilisateur, les principaux de service et les identités managées.

Propriétés des paramètres d’audit

L’objet paramètres d’audit inclut les propriétés suivantes :

Propriété Type Description
auditActionsAndGroups chaîne de caractères[] Auditer les actions et les groupes à enregistrer. Valeur par défaut : BATCH_COMPLETED_GROUP, FAILED_DATABASE_AUTHENTICATION_GROUP, SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP.
predicateExpression ficelle Expression de prédicat T-SQL utilisée pour filtrer les événements d’audit. Par exemple, statement not like '[select ]%' exclut les instructions SELECT.
retentionDays entier Nombre de jours pour conserver les journaux d’audit. 0 indique la rétention indéfinie.
state ficelle État d’audit : Enabled ou Disabled. Lorsque vous activez l’audit pour la première fois sans spécifier d’autres propriétés, le système utilise des valeurs par défaut.
storageEndpoint ficelle (Lecture seule) Point de terminaison de stockage OneLake qui stocke les journaux d’audit.

Afficher les paramètres d’audit pour toutes les bases de données d’un espace de travail

Le script PowerShell suivant répertorie toutes les bases de données SQL d’un espace de travail et récupère la configuration d’audit pour chaque base de données.

Dans le script suivant, remplacez <your workspace id> par votre ID d’espace de travail Fabric. Vous trouverez l’ID d’un espace de travail dans l’URL, il s’agit de la chaîne unique à l’intérieur de deux / caractères après /groups/ la fenêtre de votre navigateur. Par exemple, 00001111-aaaa-2222-bbbb-3333cccc4444 dans https://fabric.microsoft.com/groups/00001111-aaaa-2222-bbbb-3333cccc4444/.

Import-Module Az.Accounts

Connect-AzAccount

$workspaceId = '<your workspace id>'
$baseUri = "https://api.fabric.microsoft.com"

# Obtain an access token
$token = (Get-AzAccessToken -ResourceUrl "https://api.fabric.microsoft.com")
$secureToken = $token.Token | ConvertFrom-SecureString -AsPlainText

$headers = @{
    "Authorization" = "Bearer $secureToken"
    "Content-Type"  = "application/json"
}

# List all SQL databases in the workspace
$databasesUri = "$baseUri/v1/workspaces/$workspaceId/sqlDatabases"
$databases = @()
$continuationToken = $null

do {
    $url = $databasesUri
    if ($continuationToken) {
        $encoded = [System.Web.HttpUtility]::UrlEncode($continuationToken)
        $url = "$url`?continuationToken=$encoded"
    }
    $response = Invoke-RestMethod -Method GET -Uri $url -Headers $headers
    if ($response.value) { $databases += $response.value }
    $continuationToken = $response.continuationToken
} while ($continuationToken)

Write-Host "Found $($databases.Count) SQL databases."

# Retrieve audit settings for each database
$results = @()

foreach ($db in $databases) {
    try {
        $auditUri = "$baseUri/v1/workspaces/$workspaceId/sqlDatabases/$($db.id)/settings/sqlAudit"
        $audit = Invoke-RestMethod -Method GET -Uri $auditUri -Headers $headers

        $results += [PSCustomObject]@{
            DatabaseName        = $db.displayName
            DatabaseId          = $db.id
            State               = $audit.state
            RetentionDays       = $audit.retentionDays
            AuditActionsAndGroups = ($audit.auditActionsAndGroups -join "; ")
            PredicateExpression = $audit.predicateExpression
        }
    }
    catch {
        $results += [PSCustomObject]@{
            DatabaseName        = $db.displayName
            DatabaseId          = $db.id
            State               = "ERROR"
            RetentionDays       = ""
            AuditActionsAndGroups = ""
            PredicateExpression = $_.Exception.Message
        }
    }
}

$results | Format-Table -AutoSize

Configurer l’audit pour toutes les bases de données d’un espace de travail

Après avoir examiné l’état d’audit actuel, utilisez le script suivant pour configurer l’audit de manière cohérente sur toutes les bases de données d’un espace de travail.

Remplacez <your workspace id> par votre ID d’espace de travail Fabric. Modifiez l’objet pour qu’il $auditPayload corresponde à votre configuration d’audit souhaitée.

Import-Module Az.Accounts

Connect-AzAccount

$workspaceId = '<your workspace id>'
$baseUri = "https://api.fabric.microsoft.com"

# Obtain an access token
$token = (Get-AzAccessToken -ResourceUrl "https://api.fabric.microsoft.com")
$secureToken = $token.Token | ConvertFrom-SecureString -AsPlainText

$headers = @{
    "Authorization" = "Bearer $secureToken"
    "Content-Type"  = "application/json"
}

# Define the audit configuration to apply
$auditPayload = @{
    state                = "Enabled"
    auditActionsAndGroups = @(
        "BATCH_COMPLETED_GROUP",
        "FAILED_DATABASE_AUTHENTICATION_GROUP",
        "SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP"
    )
    retentionDays        = 10
    predicateExpression  = "statement not like '[select ]%'"
} | ConvertTo-Json -Depth 5

# List all SQL databases in the workspace
$databasesUri = "$baseUri/v1/workspaces/$workspaceId/sqlDatabases"
$databases = @()
$continuationToken = $null

do {
    $url = $databasesUri
    if ($continuationToken) {
        $encoded = [System.Web.HttpUtility]::UrlEncode($continuationToken)
        $url = "$url`?continuationToken=$encoded"
    }
    $response = Invoke-RestMethod -Method GET -Uri $url -Headers $headers
    if ($response.value) { $databases += $response.value }
    $continuationToken = $response.continuationToken
} while ($continuationToken)

Write-Host "Configuring auditing for $($databases.Count) SQL databases..."

foreach ($db in $databases) {
    try {
        $auditUri = "$baseUri/v1/workspaces/$workspaceId/sqlDatabases/$($db.id)/settings/sqlAudit"
        Invoke-RestMethod -Method PATCH -Uri $auditUri -Headers $headers -Body $auditPayload | Out-Null
        Write-Host "[OK] Updated auditing for: $($db.displayName)"
    }
    catch {
        Write-Host "[FAIL] $($db.displayName): $($_.Exception.Message)"
    }
}

Bonnes pratiques

  • Récupérez toujours les paramètres d’audit actuels avec une GET demande avant la mise à jour avec PATCH, pour comprendre la configuration existante.
  • Gérer les échecs par base de données. Si une mise à jour de base de données échoue, poursuivez le traitement des bases de données restantes.
  • Réessayez les échecs temporaires individuellement au lieu de réexécuter l’intégralité du script de mise à jour en bloc.
  • Utilisez un principal de service ou une identité managée pour la configuration d’audit automatisée ou planifiée dans les environnements de production.