다음을 통해 공유


REST API를 사용하여 SQL 데이터베이스 감사 관리

적용 대상:Microsoft Fabric의 SQL 데이터베이스

패브릭 REST API를 사용하여 SQL 데이터베이스 감사 설정을 프로그래밍 방식으로 보고 구성할 수 있습니다. SQL 감사 설정 API는 개별 SQL 데이터베이스에서 작동하는 데이터베이스 수준 API입니다. API를 PowerShell 스크립트와 결합하여 작업 영역의 모든 데이터베이스에서 지속적으로 감사를 관리할 수 있습니다.

이 문서에서는 PowerShell 및 데이터베이스 수준 SQL 감사 설정 REST API를 사용하여 패브릭 작업 영역에서 SQL 데이터베이스에 대한 감사 설정을 검색하고 업데이트하는 방법을 보여 줍니다.

사전 요구 사항

REST API 엔드포인트 검토

SQL 감사 설정 API는 개별 SQL 데이터베이스에 대한 감사를 관리하기 위한 두 가지 작업을 제공합니다.

Operation 메서드 URI
SQL 감사 설정 가져오기 GET https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/sqlDatabases/{sqlDatabaseId}/settings/sqlAudit
SQL 감사 설정 업데이트 PATCH https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/sqlDatabases/{sqlDatabaseId}/settings/sqlAudit

가져오기 작업에는 SQLDatabase.Read.All, SQLDatabase.ReadWrite.All, Item.Read.All, 또는 Item.ReadWrite.All 위임된 범위가 필요합니다. 업데이트 작업에는 SQLDatabase.ReadWrite.All 범위 또는 Item.ReadWrite.All 위임 범위가 필요합니다. 두 작업 모두 사용자 ID, 서비스 주체 및 관리 ID를 지원합니다.

감사 설정 속성

감사 설정 개체에는 다음 속성이 포함됩니다.

재산 유형 설명
auditActionsAndGroups 문자열[] 캡처할 작업 및 그룹. 기본값: BATCH_COMPLETED_GROUP, FAILED_DATABASE_AUTHENTICATION_GROUP. SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP
predicateExpression 문자열 감사 이벤트를 필터링하는 데 사용되는 T-SQL 조건자 식입니다. 예를 들어 statement not like '[select ]%' SELECT 문을 제외합니다.
retentionDays 정수 (integer) 감사 로그를 보관할 일수입니다. 0 는 무기한 보존을 나타냅니다.
state 문자열 감사 상태: Enabled 또는 Disabled. 다른 속성을 지정하지 않고 처음으로 감사를 사용하도록 설정하면 시스템에서 기본값을 사용합니다.
storageEndpoint 문자열 (읽기 전용) 감사 로그를 저장하는 OneLake 스토리지 엔드포인트입니다.

작업 영역의 모든 데이터베이스에 대한 감사 설정 보기

다음 PowerShell 스크립트는 작업 영역의 모든 SQL 데이터베이스를 나열하고 각 데이터베이스에 대한 감사 구성을 검색합니다.

다음 스크립트에서 "<your workspace id>"를 당신의 패브릭 워크스페이스 ID로 교체하세요. URL에서 작업 영역의 ID를 찾을 수 있습니다. 브라우저 창에서 /groups/ 뒤의 두 / 문자로 둘러싸인 고유한 문자열입니다. 예를 들어 00001111-aaaa-2222-bbbb-3333cccc4444https://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

작업 영역의 모든 데이터베이스에 대한 감사 구성

현재 감사 상태를 검토한 후 다음 스크립트를 사용하여 작업 영역의 모든 데이터베이스에서 일관되게 감사를 구성합니다.

<your workspace id>를 패브릭 작업 영역 ID로 바꾸세요. $auditPayload 원하는 감사 구성과 일치하도록 개체를 수정합니다.

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

모범 사례

  • 기존 구성을 이해하기 위해 GET 요청을 사용하여 현재 감사 설정을 항상 검색한 후 PATCH로 업데이트하십시오.
  • 데이터베이스당 오류를 처리합니다. 하나의 데이터베이스 업데이트가 실패하면 나머지 데이터베이스를 계속 처리합니다.
  • 전체 대량 업데이트 스크립트를 다시 실행하는 대신 일시적 오류를 개별적으로 다시 시도합니다.
  • 프로덕션 환경에서 자동 또는 예약된 감사 구성에 서비스 주체 또는 관리 ID를 사용합니다.