Mengelola audit database SQL dengan REST API

Berlaku untuk:Database SQL di Microsoft Fabric

Anda dapat menggunakan Fabric REST API untuk melihat dan mengonfigurasi pengaturan audit database SQL secara terprogram. API pengaturan audit SQL adalah API tingkat database yang beroperasi pada database SQL individual. Dengan menggabungkan API dengan skrip PowerShell, Anda dapat mengelola audit secara konsisten di semua database di ruang kerja.

Artikel ini menunjukkan cara menggunakan PowerShell dan pengaturan audit SQL tingkat database REST API untuk mengambil dan memperbarui pengaturan audit untuk database SQL di ruang kerja Fabric.

Prasyarat

Mengaudit titik akhir REST API

API pengaturan audit SQL menyediakan dua operasi untuk mengelola audit pada database SQL individual:

Pengoperasian Metode URI
Mendapatkan pengaturan audit SQL GET https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/sqlDatabases/{sqlDatabaseId}/settings/sqlAudit
Memperbarui pengaturan audit SQL PATCH https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/sqlDatabases/{sqlDatabaseId}/settings/sqlAudit

Operasi Ambil memerlukan SQLDatabase.Read.All, SQLDatabase.ReadWrite.All, Item.Read.All, atau Item.ReadWrite.All cakupan yang didelegasikan. Operasi Pembaruan memerlukan cakupan SQLDatabase.ReadWrite.All atau Item.ReadWrite.All yang didelegasikan. Kedua operasi mendukung identitas pengguna, perwakilan layanan, dan identitas terkelola.

Properti pengaturan audit

Objek pengaturan audit mencakup properti berikut:

Harta benda Tipe Deskripsi
auditActionsAndGroups string[] Mengaudit tindakan dan grup untuk ditangkap. Default: BATCH_COMPLETED_GROUP, FAILED_DATABASE_AUTHENTICATION_GROUP, SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP.
predicateExpression string Ekspresi predikat T-SQL yang digunakan untuk memfilter peristiwa audit. Misalnya, statement not like '[select ]%' mengecualikan pernyataan SELECT.
retentionDays bilangan bulat Jumlah hari untuk menyimpan log audit. 0 menunjukkan retensi yang tidak terbatas.
state string Status audit: Enabled atau Disabled. Saat Anda mengaktifkan audit untuk pertama kalinya tanpa menentukan properti lain, sistem menggunakan nilai default.
storageEndpoint string (Baca-saja) Titik akhir penyimpanan OneLake yang menyimpan log audit.

Menampilkan pengaturan audit untuk semua database di ruang kerja

Skrip PowerShell berikut mencantumkan semua database SQL di ruang kerja dan mengambil konfigurasi audit untuk setiap database.

Dalam skrip berikut, ganti <your workspace id> dengan ID ruang kerja Fabric Anda. Anda dapat menemukan ID ruang kerja di URL, ini adalah string unik di dalam dua / karakter setelah /groups/ di jendela browser Anda. Misalnya, 00001111-aaaa-2222-bbbb-3333cccc4444 di 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

Mengonfigurasi audit untuk semua database di ruang kerja

Setelah Anda meninjau status audit saat ini, gunakan skrip berikut untuk mengonfigurasi audit secara konsisten di semua database di ruang kerja.

Ganti <your workspace id> dengan ID ruang kerja Fabric Anda. $auditPayload Ubah objek agar sesuai dengan konfigurasi audit yang Anda inginkan.

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

Praktik terbaik

  • Selalu dapatkan pengaturan audit saat ini dengan permintaan GET sebelum memperbarui dengan PATCH, untuk memahami konfigurasi yang ada.
  • Menangani kegagalan pada masing-masing database. Jika satu pembaruan database gagal, lanjutkan pemrosesan database yang tersisa.
  • Coba lagi kegagalan sementara satu per satu alih-alih menjalankan ulang seluruh skrip pembaruan massal.
  • Gunakan perwakilan layanan atau identitas terkelola untuk konfigurasi audit otomatis atau terjadwal di lingkungan produksi.