Freigeben über


Verwalten der SQL-Datenbanküberwachung mit der REST-API

Gilt für:SQL-Datenbank in Microsoft Fabric

Sie können die Fabric-REST-API verwenden, um die SQL-Datenbanküberwachungseinstellungen programmgesteuert anzuzeigen und zu konfigurieren. Die API für SQL-Überwachungseinstellungen ist eine API auf Datenbankebene, die auf einzelnen SQL-Datenbanken ausgeführt wird. Durch die Kombination der API mit PowerShell-Skripts können Sie die Überwachung konsistent für alle Datenbanken in einem Arbeitsbereich verwalten.

In diesem Artikel wird veranschaulicht, wie Sie PowerShell und die REST-API für SQL-Überwachungseinstellungen auf Datenbankebene verwenden, um Überwachungseinstellungen für SQL-Datenbanken in einem Fabric-Arbeitsbereich abzurufen und zu aktualisieren.

Voraussetzungen

Überwachen von REST-API-Endpunkten

Die SQL-Überwachungseinstellungen-API bietet zwei Vorgänge zum Verwalten der Überwachung in einzelnen SQL-Datenbanken:

Vorgang Methode URI
Abrufen von SQL-Überwachungseinstellungen GET https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/sqlDatabases/{sqlDatabaseId}/settings/sqlAudit
Aktualisieren der SQL-Überwachungseinstellungen PATCH https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/sqlDatabases/{sqlDatabaseId}/settings/sqlAudit

Der Get-Vorgang erfordert SQLDatabase.Read.All, SQLDatabase.ReadWrite.All oder Item.Read.AllItem.ReadWrite.All-delegierten Berechtigungsbereich. Der Aktualisierungsvorgang erfordert SQLDatabase.ReadWrite.All oder Item.ReadWrite.All delegierten Bereich. Beide Vorgänge unterstützen Benutzeridentitäten, Dienstprinzipale und verwaltete Identitäten.

Eigenschaften von Auditeinstellungen

Das Überwachungseinstellungsobjekt enthält die folgenden Eigenschaften:

Eigentum Typ Beschreibung
auditActionsAndGroups string[] Überprüfen Sie Aktionen und Gruppen, die erfasst werden sollen. Voreinstellung: BATCH_COMPLETED_GROUP, FAILED_DATABASE_AUTHENTICATION_GROUP, SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP.
predicateExpression Schnur Ein T-SQL-Prädikatausdruck, der zum Filtern von Überwachungsereignissen verwendet wird. Schließt beispielsweise statement not like '[select ]%' SELECT-Anweisungen aus.
retentionDays Integer Anzahl der Tage, die Prüfprotokolle aufbewahrt werden sollen. 0 gibt eine unbestimmte Aufbewahrung an.
state Schnur Überwachungsstatus: Enabled oder Disabled. Wenn Sie die Überwachung zum ersten Mal aktivieren, ohne andere Eigenschaften anzugeben, verwendet das System Standardwerte.
storageEndpoint Schnur (Schreibgeschützt) Der OneLake-Speicherendpunkt, der Überwachungsprotokolle speichert.

Anzeigen von Überwachungseinstellungen für alle Datenbanken in einem Arbeitsbereich

Das folgende PowerShell-Skript listet alle SQL-Datenbanken in einem Arbeitsbereich auf und ruft die Überwachungskonfiguration für jede Datenbank ab.

Ersetzen Sie im folgenden Skript <your workspace id> durch Ihre Fabric-Arbeitsbereichs-ID. Sie können die ID eines Arbeitsbereichs in der URL finden; sie ist die eindeutige Zeichenfolge zwischen zwei / Zeichen nach /groups/ in Ihrem Browserfenster. Beispiel: 00001111-aaaa-2222-bbbb-3333cccc4444 in 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

Konfigurieren der Überwachung für alle Datenbanken in einem Arbeitsbereich

Nachdem Sie den aktuellen Überwachungsstatus überprüft haben, verwenden Sie das folgende Skript, um die Überwachung konsistent für alle Datenbanken in einem Arbeitsbereich zu konfigurieren.

Ersetzen Sie <your workspace id> durch Ihre Fabric-Arbeitsbereichs-ID. Ändern Sie das $auditPayload Objekt so, dass es ihrer gewünschten Überwachungskonfiguration entspricht.

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)"
    }
}

Bewährte Methoden

  • Rufen Sie immer die aktuellen Überwachungseinstellungen mit einer GET-Anforderung ab, bevor Sie diese mit PATCH aktualisieren, damit Sie die bestehende Konfiguration nachvollziehen können.
  • Fehler pro Datenbank behandeln. Wenn eine Datenbankaktualisierung fehlschlägt, fahren Sie mit der Verarbeitung der verbleibenden Datenbanken fort.
  • Wiederholen Sie vorübergehende Fehler einzeln, anstatt das gesamte Massenaktualisierungsskript erneut auszuführen.
  • Verwenden Sie einen Dienstprinzipal oder eine verwaltete Identität für die automatisierte oder geplante Überwachungskonfiguration in Produktionsumgebungen.