REST API ile SQL veritabanı denetimini yönetme

Şunlar için geçerlidir:Microsoft Fabric'te SQL veritabanı

Doku REST API'sini kullanarak SQL veritabanı denetim ayarlarını program aracılığıyla görüntüleyebilir ve yapılandırabilirsiniz. SQL denetim ayarları API'si, tek tek SQL veritabanlarında çalışan veritabanı düzeyinde bir API'dir. API'yi PowerShell betikleriyle birleştirerek, çalışma alanı içindeki tüm veritabanlarında denetimi tutarlı bir şekilde yönetebilirsiniz.

Bu makalede, Bir Yapı çalışma alanında SQL veritabanları için denetim ayarlarını almak ve güncelleştirmek için PowerShell ve veritabanı düzeyinde SQL denetim ayarları REST API'sinin nasıl kullanılacağı gösterilmektedir.

Önkoşullar

REST API uç noktalarını denetleme

SQL denetim ayarları API'si, tek tek SQL veritabanlarında denetimi yönetmek için iki işlem sağlar:

Operation Yöntem URI
SQL denetim ayarlarını alma GET https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/sqlDatabases/{sqlDatabaseId}/settings/sqlAudit
SQL denetim ayarlarını güncelleştirme PATCH https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/sqlDatabases/{sqlDatabaseId}/settings/sqlAudit

Get işlemi için SQLDatabase.Read.All, SQLDatabase.ReadWrite.All, Item.Read.All, veya Item.ReadWrite.All temsilci kapsamı gerekir. Güncelleştirme işlemi için SQLDatabase.ReadWrite.All veya Item.ReadWrite.All tarafından yetkilendirilmiş kapsam gerekir. Her iki işlem de kullanıcı kimliklerini, hizmet sorumlularını ve yönetilen kimlikleri destekler.

Denetim ayarları özellikleri

Denetim ayarları nesnesi aşağıdaki özellikleri içerir:

Mülkiyet Türü Açıklama
auditActionsAndGroups string[] Denetlenecek eylemleri ve tutulacak grupları yakala. Varsayılan: BATCH_COMPLETED_GROUP, FAILED_DATABASE_AUTHENTICATION_GROUP, SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP.
predicateExpression string Denetim olaylarını filtrelemek için kullanılan bir T-SQL koşulu ifadesi. Örneğin, statement not like '[select ]%' SELECT deyimlerini dışlar.
retentionDays tamsayı Denetim günlüklerinin tutulacak gün sayısı. 0 süresiz saklamayı gösterir.
state string Denetim durumu: Enabled veya Disabled. Denetimi diğer özellikleri belirtmeden ilk kez etkinleştirdiğinizde sistem varsayılan değerleri kullanır.
storageEndpoint string (Salt okunur) Denetim günlüklerini depolayan OneLake depolama uç noktası.

Çalışma alanında tüm veritabanları için denetim ayarlarını görüntüleme

Aşağıdaki PowerShell betiği çalışma alanında tüm SQL veritabanlarını listeler ve her veritabanı için denetim yapılandırmasını alır.

Aşağıdaki betikte <your workspace id> ifadesini Doku çalışma alanı kimliğinizle değiştirin. Url'de bir çalışma alanının kimliğini bulabilirsiniz ; bu, tarayıcı pencerenizde iki / karakterden sonraki /groups/ benzersiz dizedir. Örneğin, 00001111-aaaa-2222-bbbb-3333cccc4444 içinde 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

Çalışma alanı içindeki tüm veritabanları için denetimi yapılandırma

Geçerli denetim durumunu gözden geçirdikten sonra, çalışma alanı içindeki tüm veritabanlarında denetimi tutarlı bir şekilde yapılandırmak için aşağıdaki betiği kullanın.

<your workspace id> ifadesini Fabric çalışma alanı kimliğiniz ile değiştirin. $auditPayload Nesneyi istediğiniz denetim yapılandırmasıyla eşleşecek şekilde değiştirin.

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

En iyi uygulamalar

  • Daima geçerli denetim ayarlarını var olan yapılandırmayı anlamak için güncellemeyi PATCH yapmadan önce bir GET isteğiyle alın.
  • Hataları, veritabanı başına işleme. Bir veritabanı güncelleştirmesi başarısız olursa kalan veritabanlarını işlemeye devam edin.
  • Toplu güncelleme betiğinin tamamını yeniden çalıştırmak yerine geçici hata türlerini her birini tek tek yeniden deneyin.
  • Üretim ortamlarında otomatik veya zamanlanmış denetim yapılandırması için hizmet sorumlusu veya yönetilen kimlik kullanın.