Zdieľať cez


Spravovať audit SQL databáz pomocou REST API

Platí na: SQL databázu v Microsoft Fabric

Môžete použiť Fabric REST API na programové zobrazenie a konfiguráciu nastavení auditu SQL databázy. API pre nastavenia auditu SQL je API na úrovni databázy, ktoré pracuje na jednotlivých SQL databázach. Kombináciou API s PowerShell skriptami môžete riadiť audit konzistentne naprieč všetkými databázami v pracovnom priestore.

Tento článok ukazuje, ako použiť PowerShell a REST API pre audit SQL na úrovni databázy na získanie a aktualizáciu nastavení auditu pre SQL databázy v pracovnom priestore Fabric.

Predpoklady

Auditovanie koncových bodov REST API

API pre nastavenia auditu SQL poskytuje dve operácie na správu auditu jednotlivých SQL databáz:

Operation Metóda URI
Získajte nastavenia SQL auditu GET https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/sqlDatabases/{sqlDatabaseId}/settings/sqlAudit
Aktualizujte nastavenia SQL auditu PATCH https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/sqlDatabases/{sqlDatabaseId}/settings/sqlAudit

Operácia Get vyžaduje SQLDatabase.Read.All, SQLDatabase.ReadWrite.All, Item.Read.All, alebo Item.ReadWrite.All delegovaný rozsah. Operácia Update vyžaduje alebo Item.ReadWrite.All deleguje SQLDatabase.ReadWrite.All rozsah. Obe operácie podporujú používateľské identity, princípy služieb a spravované identity.

Vlastnosti nastavení auditu

Objekt nastavení auditu obsahuje nasledujúce vlastnosti:

Vlastnosť Typ Description
auditActionsAndGroups reťazec[] Auditné akcie a skupiny na zachytenie. Predvolené: BATCH_COMPLETED_GROUP, FAILED_DATABASE_AUTHENTICATION_GROUP, . SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP
predicateExpression reťazec T-SQL predikátový výraz používaný na filtrovanie auditných udalostí. Napríklad vylučuje statement not like '[select ]%' SELECT príkazy.
retentionDays typ Integer Počet dní na uchovávanie auditných záznamov. 0 označuje neobmedzené udržanie.
state reťazec Audit stav: Enabled alebo Disabled. Keď prvýkrát zapnete audit bez špecifikácie iných vlastností, systém použije predvolené hodnoty.
storageEndpoint reťazec (Iba na čítanie) OneLake endpoint na ukladanie, ktorý uchováva auditné logy.

Zobraziť nastavenia auditu pre všetky databázy v pracovnom priestore

Nasledujúci PowerShell skript uvádza všetky SQL databázy v pracovnom priestore a získava auditnú konfiguráciu pre každú databázu.

V nasledujúcom skripte nahraďte <your workspace id> svoje ID pracovného priestoru služby Fabric. ID pracovného priestoru nájdete v URL, je to jedinečný reťazec v dvoch / znakoch v /groups/ okne prehliadača. Naprí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

Nastavte auditovanie pre všetky databázy v pracovnom priestore

Po preskúmaní aktuálneho stavu auditu použite nasledujúci skript na konzistentnú konfiguráciu auditu vo všetkých databázach v pracovnom priestore.

Nahraďte <your workspace id> ho identifikátorom pracovného priestoru služby Fabric. Upravte $auditPayload objekt tak, aby zodpovedal vašej požadovanej konfigurácii auditu.

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

Osvedčené postupy

  • Vždy si pred aktualizáciou PATCHpomocou , aby ste pochopili existujúcu konfiguráciu, vždy obnovte aktuálne nastavenia auditu s požiadavkouGET.
  • Riešenie zlyhaní v každej databáze. Ak jedna aktualizácia databázy zlyhá, pokračujte v spracovaní zostávajúcich databáz.
  • Opakovane skúšajte prechodné zlyhania jednotlivo namiesto opakovania celého hromadného aktualizáciového skriptu.
  • Použite service principal alebo spravovanú identitu pre automatizovanú alebo plánovanú auditnú konfiguráciu v produkčných prostrediach.