Del via


Administrer SQL-databaserevision med REST API'en

Gælder for:SQL database i Microsoft Fabric

Du kan bruge Fabric REST API til at se og konfigurere SQL-databaseauditing-indstillinger programmatisk. SQL audit settings API er et database-niveau API, der opererer på individuelle SQL-databaser. Ved at kombinere API'et med PowerShell-scripts kan du administrere revision konsekvent på tværs af alle databaser i et arbejdsområde.

Denne artikel demonstrerer, hvordan man bruger PowerShell og databaseniveauet SQL audit settings REST API til at hente og opdatere auditindstillinger for SQL-databaser i et Fabric-arbejdsområde.

Forudsætninger

Revision af REST API-endepunkter

SQL audit settings API'en tilbyder to operationer til håndtering af revision på individuelle SQL-databaser:

Operation Metode URI
Få SQL-revisionsindstillinger GET https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/sqlDatabases/{sqlDatabaseId}/settings/sqlAudit
Opdater SQL-revisionsindstillinger PATCH https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/sqlDatabases/{sqlDatabaseId}/settings/sqlAudit

Hent-operationen kræver SQLDatabase.Read.All, SQLDatabase.ReadWrite.All, Item.Read.All, , eller Item.ReadWrite.All delegeret omfang. Opdateringsoperationen kræver SQLDatabase.ReadWrite.All eller Item.ReadWrite.All delegerer omfang. Begge operationer understøtter brugeridentiteter, serviceprincipaler og administrerede identiteter.

Revisionsindstillinger egenskaber

Auditindstillingsobjektet indeholder følgende egenskaber:

Property Type Beskrivelse
auditActionsAndGroups streng[] Revider handlinger og grupper, der skal fanges. Standard: BATCH_COMPLETED_GROUP, FAILED_DATABASE_AUTHENTICATION_GROUP, SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP.
predicateExpression streng Et T-SQL-prædikatudtryk, der bruges til at filtrere revisionsbegivenheder. For eksempel udelukker SELECT-sætninger statement not like '[select ]%' .
retentionDays heltal Antal dage til at opbevare revisionslogbøger. 0 indikerer ubegrænset fastholdelse.
state streng Revisionsstat: Enabled eller Disabled. Når du aktiverer revision for første gang uden at specificere andre egenskaber, bruger systemet standardværdier.
storageEndpoint streng (Kun for læsning) OneLake-lagringsendpointet, der gemmer revisionslogs.

Se auditindstillinger for alle databaser i et arbejdsområde

Følgende PowerShell-script lister alle SQL-databaser i et arbejdsområde og henter auditkonfigurationen for hver database.

I følgende script skal du erstatte <your workspace id> med dit Fabric-arbejdsområde-id. Du kan finde ID'et for et arbejdsområde i URL'en, det er den unikke streng inden for to / tegn i /groups/ dit browservindue. I f.eks 00001111-aaaa-2222-bbbb-3333cccc4444 . i 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

Konfigurér revision for alle databaser i et arbejdsområde

Efter du har gennemgået den aktuelle revisionsstatus, brug følgende script til at konfigurere auditing konsekvent på tværs af alle databaser i et arbejdsområde.

Erstat <your workspace id> med dit Fabric-arbejdsområde-id. Modificerer objektet, så det $auditPayload matcher din ønskede auditkonfiguration.

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

Bedste praksis

  • Hent altid de aktuelle revisionsindstillinger med en GET anmodning, før du opdaterer med PATCH, for at forstå den eksisterende konfiguration.
  • Håndter fejl pr. database. Hvis en databaseopdatering fejler, fortsætter behandlingen af de resterende databaser.
  • Prøv transientfejl individuelt i stedet for at køre hele bulkopdateringsscriptet igen.
  • Brug en serviceprincipal eller managed identity til automatiseret eller planlagt auditkonfiguration i produktionsmiljøer.