Jaa


Hallinnoi SQL-tietokannan auditointia REST API:lla

Soveltaa:SQL-tietokanta Microsoft Fabric

Voit käyttää Fabric REST API :ta SQL-tietokannan auditointiasetusten tarkasteluun ja konfigurointiin ohjelmallisesti. SQL-auditointiasetusten API on tietokantatason API, joka toimii yksittäisillä SQL-tietokannoilla. Yhdistämällä API:n PowerShell-skripteihin voit hallita auditointia johdonmukaisesti kaikissa tietokannoissa työtilassa.

Tässä artikkelissa näytetään, miten PowerShelliä ja tietokantatason SQL-auditointiasetuksia REST API:ta käytetään SQL-tietokantojen auditointiasetusten hakemiseen ja päivittämiseen Fabric-työtilassa.

Edellytykset

REST API -päätepisteiden auditointi

SQL-auditointiasetusten API tarjoaa kaksi toimintoa yksittäisten SQL-tietokantojen auditoinnin hallintaan:

Toiminto Menetelmä URI
Hanki SQL-auditointiasetukset GET https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/sqlDatabases/{sqlDatabaseId}/settings/sqlAudit
Päivitä SQL-auditointiasetukset PATCH https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/sqlDatabases/{sqlDatabaseId}/settings/sqlAudit

Get-operaatio vaatii SQLDatabase.Read.All, SQLDatabase.ReadWrite.All, Item.Read.All, eli Item.ReadWrite.All delegoidun laajuuden. Päivitystoiminto vaatii SQLDatabase.ReadWrite.All tai Item.ReadWrite.All delegoi laajuuden. Molemmat toiminnot tukevat käyttäjäidentiteettejä, palveluperiaatteita ja hallittuja identiteettejä.

Auditointiasetusten ominaisuudet

Auditointiasetusten objekti sisältää seuraavat ominaisuudet:

Ominaisuus Tyyppi Description
auditActionsAndGroups string[] Auditointitoimet ja ryhmät, joita voi kerätä. Oletuksena: BATCH_COMPLETED_GROUP, FAILED_DATABASE_AUTHENTICATION_GROUP, SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP.
predicateExpression merkkijono T-SQL-predikaattilauseke, jota käytetään auditointitapahtumien suodattamiseen. Esimerkiksi poissulkee statement not like '[select ]%' SELECT-lauseet.
retentionDays kokonaisluku Päivien määrä tilintarkastuslokien säilyttämiseen. 0 tarkoittaa määräämätöntä säilytystä.
state merkkijono Tilintarkastustila: Enabled tai Disabled. Kun otat auditoinnin käyttöön ensimmäistä kertaa ilman muiden ominaisuuksien määrittelyä, järjestelmä käyttää oletusarvoja.
storageEndpoint merkkijono (Vain luku) OneLake-tallennuspäätepiste, joka tallentaa auditointilokit.

Näytä auditointiasetukset kaikille tietokannoille työtilassa

Seuraava PowerShell-skripti listaa kaikki SQL-tietokannat työtilassa ja hakee kunkin tietokannan auditointiasetukset.

Korvaa <your workspace id> seuraavassa komentosarjassa Fabric-työtilatunnuksellasi. Löydät työtilan ID:n URL-osoitteesta, se on ainutlaatuinen merkkijono, joka on kahden / merkin sisällä selaimen ikkunassa/groups/. Esimerkiksi 00001111-aaaa-2222-bbbb-3333cccc4444 kohdassa 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

Määritä auditointi kaikille tietokannoille työtilassa

Kun olet tarkastellut nykyistä auditointitilaa, käytä seuraavaa skriptiä konfiguroidaksesi auditoinnin johdonmukaisesti kaikissa tietokannoissa työtilassa.

Korvaa <your workspace id> se Fabric-työtilan tunnuksellasi. Muokkaa objektia $auditPayload vastaamaan haluamaasi auditointikonfiguraatiota.

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

Parhaat käytännöt

  • Hae aina nykyiset auditointiasetukset pyynnöllä GET ennen kuin päivität , PATCHjotta ymmärrät nykyisen konfiguraation.
  • Käsittele vikat per tietokanta. Jos yksi tietokantapäivitys epäonnistuu, jatka jäljellä olevien tietokantojen käsittelyä.
  • Kokeile tilapäisiä epäonnistumisia yksitellen sen sijaan, että ajaisit koko massapäivitysskriptin uudelleen.
  • Käytä palvelupäätä tai hallittua identiteettiä automatisoituun tai ajoitettuun auditointikonfiguraatioon tuotantoympäristöissä.