Megosztás a következőn keresztül:


SQL-adatbázis naplózásának kezelése a REST API-val

A következőkre vonatkozik:SQL-adatbázis a Microsoft Fabricben

A Fabric REST API használatával programozott módon tekintheti meg és konfigurálhatja az SQL Database naplózási beállításait. Az SQL naplózási beállítások API egy adatbázisszintű API, amely egyes SQL-adatbázisokon működik. Az API és a PowerShell-szkriptek kombinálásával konzisztensen kezelheti a naplózást a munkaterület összes adatbázisában.

Ez a cikk bemutatja, hogyan használható a PowerShell és az adatbázisszintű SQL-naplózási beállítások REST API-ja az SQL-adatbázisok naplózási beállításainak lekérésére és frissítésére a Fabric-munkaterületen.

Előfeltételek

REST API-végpontok naplózása

Az SQL naplózási beállítások API két műveletet biztosít az egyes SQL-adatbázisok naplózásának kezeléséhez:

Operation Módszer URI
SQL-naplózási beállítások lekérése GET https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/sqlDatabases/{sqlDatabaseId}/settings/sqlAudit
SQL-naplózási beállítások frissítése PATCH https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/sqlDatabases/{sqlDatabaseId}/settings/sqlAudit

A Get művelethez , , SQLDatabase.Read.AllSQLDatabase.ReadWrite.Allvagy Item.Read.All delegált hatókörre van szükségItem.ReadWrite.All. A frissítési művelethez szükség van SQLDatabase.ReadWrite.All vagy Item.ReadWrite.All delegált hatókörre. Mindkét művelet támogatja a felhasználói identitásokat, a szolgáltatásneveket és a felügyelt identitásokat.

Naplózási beállítások tulajdonságai

A naplózási beállítások objektum a következő tulajdonságokat tartalmazza:

Ingatlan Típus Leírás
auditActionsAndGroups karakterlánc[] Ellenőrzendő műveletek és csoportok rögzítése. Alapértelmezett: BATCH_COMPLETED_GROUP, FAILED_DATABASE_AUTHENTICATION_GROUP. SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP
predicateExpression karakterlánc A naplózási események szűrésére használt T-SQL predikátumkifejezés. Például kizárja a statement not like '[select ]%' SELECT utasításokat.
retentionDays egész szám Az auditnaplók megőrzésére vonatkozó napok száma. 0 határozatlan idejű megőrzést jelez.
state karakterlánc Ellenőrzési állapot: Enabled vagy Disabled. Ha először engedélyezi a naplózást más tulajdonságok megadása nélkül, a rendszer alapértelmezett értékeket használ.
storageEndpoint karakterlánc (Írásvédett) Az auditnaplókat tároló OneLake storage-végpont.

A munkaterület összes adatbázisának naplózási beállításainak megtekintése

A következő PowerShell-szkript felsorolja a munkaterület összes SQL-adatbázisát, és lekéri az egyes adatbázisok naplózási konfigurációját.

Az alábbi szkriptben cserélje le a <your workspace id>-t a Fabric-munkaterület azonosítójával. A munkaterület azonosítóját az URL-címben találja, a /groups/ után, a böngészőablakban két / karakter között található egyedi sztring. Például a 00001111-aaaa-2222-bbbb-3333cccc4444https://fabric.microsoft.com/groups/00001111-aaaa-2222-bbbb-3333cccc4444/-ben.

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

Az ellenőrzés konfigurálása a munkaterületen lévő minden adatbázisra.

Az aktuális naplózási állapot áttekintése után az alábbi szkripttel konfigurálja a naplózást a munkaterület összes adatbázisában.

Cserélje le <your workspace id> a Fabric-munkaterület azonosítóját. Módosítsa az $auditPayload objektumot a kívánt auditálási konfigurációnak megfelelően.

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

Bevált gyakorlatok

  • A meglévő konfiguráció megértéséhez mindig kérje le az aktuális naplózási beállításokat egy GET kéréssel PATCHa frissítés előtt.
  • Adatbázisonkénti hibák kezelése. Ha egy adatbázis frissítése sikertelen, folytassa a fennmaradó adatbázisok feldolgozását.
  • A teljes tömeges frissítési szkript újrafuttatása helyett próbálkozzon újra az átmeneti hibák egyenkénti újrafuttatásával.
  • Szolgáltatásnév vagy felügyelt identitás használata automatizált vagy ütemezett naplózási konfigurációhoz éles környezetekben.