Správa auditování databází SQL pomocí rozhraní REST API

platí pro:databáze SQL v Microsoft Fabric

Rozhraní REST API fabric můžete použít k zobrazení a konfiguraci nastavení auditování databáze SQL prostřednictvím kódu programu. Rozhraní API pro nastavení auditu SQL je rozhraní API na úrovni databáze, které pracuje s jednotlivými databázemi SQL. Kombinací rozhraní API se skripty PowerShellu můžete spravovat auditování konzistentně napříč všemi databázemi v pracovním prostoru.

Tento článek ukazuje, jak pomocí PowerShellu a rozhraní REST API pro nastavení auditu SQL na úrovni databáze načíst a aktualizovat nastavení auditování pro databáze SQL v pracovním prostoru Fabric.

Předpoklady

Auditování koncových bodů rozhraní REST API

Rozhraní API pro nastavení auditu SQL poskytuje dvě operace pro správu auditování jednotlivých databází SQL:

Operation Metoda identifikátor URI
Získání nastavení auditu SQL GET https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/sqlDatabases/{sqlDatabaseId}/settings/sqlAudit
Aktualizace nastavení auditu SQL PATCH https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/sqlDatabases/{sqlDatabaseId}/settings/sqlAudit

Operace Get vyžaduje SQLDatabase.Read.All, SQLDatabase.ReadWrite.All, Item.Read.Allnebo Item.ReadWrite.All delegovaný obor. Operace Aktualizace vyžaduje buď SQLDatabase.ReadWrite.All nebo Item.ReadWrite.All oprávnění pro delegovaný přístup. Obě operace podporují identity uživatelů, služby zástupců a spravované identity.

Vlastnosti nastavení auditu

Objekt nastavení auditu obsahuje následující vlastnosti:

Vlastnictví Typ Description
auditActionsAndGroups řetězec[] Auditujte akce a skupiny, které se mají zachytit. Výchozí hodnota: BATCH_COMPLETED_GROUP, FAILED_DATABASE_AUTHENTICATION_GROUP, SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP.
predicateExpression řetězec Výraz predikátu T-SQL sloužící k filtrování událostí auditu. Vyloučí například statement not like '[select ]%' příkazy SELECT.
retentionDays integer Počet dnů, po které se mají uchovávat protokoly auditu 0 označuje neomezenou dobu uchování.
state řetězec Stav auditu: Enabled nebo Disabled. Když auditování povolíte poprvé bez zadání dalších vlastností, systém použije výchozí hodnoty.
storageEndpoint řetězec (Jen pro čtení) Koncový bod úložiště OneLake, který ukládá protokoly auditu.

Zobrazení nastavení auditování pro všechny databáze v pracovním prostoru

Následující skript PowerShellu zobrazí seznam všech databází SQL v pracovním prostoru a načte konfiguraci auditování pro každou databázi.

V tomto skriptu nahraďte <your workspace id> za ID vašeho pracovního prostoru Fabric. ID pracovního prostoru najdete v adrese URL. Jedná se o jedinečný řetězec uvnitř dvou / znaků za /groups/ oknem prohlížeče. Například 00001111-aaaa-2222-bbbb-3333cccc4444 v 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

Konfigurace auditování pro všechny databáze v pracovním prostoru

Po kontrole aktuálního stavu auditování pomocí následujícího skriptu konzistentně nakonfigurujte auditování napříč všemi databázemi v pracovním prostoru.

Nahraďte <your workspace id> ID pracovního prostoru Fabric. $auditPayload Upravte objekt tak, aby odpovídal požadované konfiguraci auditování.

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

Osvědčené postupy

  • Vždy načtěte aktuální nastavení auditu s požadavkem GET před aktualizací pomocí PATCH, abyste porozuměli stávající konfiguraci.
  • Řešení selhání pro každou databázi. Pokud selže jedna aktualizace databáze, pokračujte ve zpracování zbývajících databází.
  • Opakování přechodných selhání jednotlivě místo opakovaného spuštění celého skriptu hromadné aktualizace
  • Použijte aplikační objekt nebo spravovanou identitu pro automatizovanou nebo plánovanou konfiguraci auditu v produkčních prostředích.