다음을 통해 공유


PolyBase에서 관리 ID를 사용하여 Azure Storage에 연결

적용 대상: SQL Server 2025(17.x) 미리 보기 이상 버전

SQL Server 2025(17.x) 미리 보기부터 관리 ID 를 사용하여 다음 Azure 리소스에 액세스할 수 있습니다.

  • Azure Blob Storage (애저 블롭 스토리지)
  • Azure Data Lake

필수 조건

  • SQL Server 2025(17.x) 미리 보기
  • Azure Arc로 구동되는 SQL Server
  • allow server scoped db credentials 서버 구성 옵션 사용
  • 관리 ID에 Azure Blob Storage 리소스에 대한 액세스 권한을 부여합니다.

레지스트리 업데이트

경고

레지스트리를 올바르게 편집하지 않으면 시스템을 심각하게 손상시킬 수 있습니다. 따라서 레지스트리를 변경하기 전에 컴퓨터의 중요한 데이터는 백업해 두는 것이 좋습니다.

레지스트리 하위 키를 업데이트합니다 \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQLServer\FederatedAuthentication. 데이터 스토리지 유형에 대해 다음 항목을 추가합니다.

Entry 가치
AADDataLakeEndPoint datalake.azure.net
AADAzureStorageEndpoint storage.azure.com

레지스트리 예제

다음 예제 스크립트는 SQL Server 2025(17.x) 미리 보기 명명된 인스턴스 SQL25Inst(아직 없는 경우)에 대한 레지스트리 키를 삽입합니다.

# Change to your SQL Server instance.
$yourInstance = "MSSQL17.SQL25Inst"

# Define the registry path
$regPath = "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\$($yourInstance)\MSSQLServer\FederatedAuthentication"
Write-Host "Path to be updated: $regPath"

# Ensure the path exists
if (-not (Test-Path $regPath)) {
    New-Item -Path $regPath -Force | Out-Null
}

# Define the values to create
$values = @{
    "AADDataLakeEndPoint" = "datalake.azure.net"
    "AADAzureStorageEndpoint" = "storage.azure.com"
}

foreach ($name in $values.Keys) {
    $existing = Get-ItemProperty -Path $regPath -Name $name -ErrorAction SilentlyContinue
    if ($null -eq $existing) {
        New-ItemProperty -Path $regPath -Name $name -Value $values[$name] -PropertyType String -Force
        Write-Host "Created registry value '$name' with '$($values[$name])'"
    }
    else {
        Write-Host "Registry value '$name' already exists. Skipping..."
    }
}

Azure Arc에서 사용하도록 설정된 SQL Server에 대한 관리 ID(미리 보기)에 설명된 키와 함께 이러한 키를 추가합니다.

데이터베이스 범위 자격 증명 만들기

관리 ID에 대한 데이터베이스 범위 자격 증명을 추가합니다.

  1. 서버 범위 데이터베이스 자격 증명을 허용합니다. 다음 Transact-SQL 쿼리를 실행합니다.

    EXECUTE sp_configure 'allow server scoped db credentials', 1;
    GO
    RECONFIGURE;
    
  2. 데이터베이스 범위 자격 증명을 만듭니다. 이 예제에서는 다음 이름을 managed_id사용합니다.

    CREATE DATABASE SCOPED CREDENTIAL [managed_id]
    WITH IDENTITY = 'Managed Identity';
    

외부 데이터 원본 만들기

다음 설정을 사용하여 외부 데이터 원본을 만듭니다.

  • 커넥터 위치 접두사

    • abs
  • 위치 경로

    • abs://<container_name>@<storage_account_name>.blob.core.windows.net/ 또는
    • abs://<storage_account_name>.blob.core.windows.net/<container_name>
  • 제품/서비스별 지원되는 위치

    • Azure Arc에서 사용하도록 설정된 SQL Server 2025(17.x) 미리 보기
    • SQL Server 2022(16.x): 지원되는 계층 구조 네임스페이스
  • 인증

    • SAS(공유 액세스 서명) 또는
    • 관리형 아이덴티티

Azure Blob Storage에서 Parquet 파일을 쿼리합니다

SQL Server 2025(17.x) 미리 보기는 Azure Arc를 통해 관리 ID를 지원합니다. 지침은 Azure Arc에서 사용하도록 설정된 SQL Server에 대한 관리 ID(미리 보기)를 참조하세요.

다음 예제에서는 Azure Blob Storage에서 Parquet 파일을 쿼리합니다.

EXECUTE sp_configure 'allow server scoped db credentials', 1;
RECONFIGURE;
GO

CREATE DATABASE SCOPED CREDENTIAL [managed_id]
WITH IDENTITY = 'Managed Identity';

CREATE EXTERNAL DATA SOURCE [my_external_data_source]
WITH (
    LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
    CREDENTIAL = managed_id
);

오류 및 해결 방법

외부 테이블에 액세스할 수 없음(오류 16562)

필수 구성 요소가 누락된 경우 Azure Blob Storage 또는 Azure Data Lake에 액세스하려고 할 때 오류 16562가 발생할 수 있습니다.

Msg 16562, Level 16, State 1, Line 79
External table <name> is not accessible because ___location does not exist or it is used by another process.

다음 항목을 확인합니다.

파일을 열 수 없습니다(오류 13822)

관리 ID에 스토리지 계정에 대한 권한이 없거나 스토리지에 대한 네트워크 액세스가 차단된 경우 Azure Blob Storage 또는 Azure Data Lake에 액세스할 때 오류 13822가 발생할 수 있습니다.

Msg 13822, Level 16, State 1, Line 9
File <file> cannot be opened because it does not exist or it is used by another process.

다음 항목을 확인합니다.

  • 관리 ID에 스토리지 컨테이너에 대한 권한이 있나요?
  • 관리 ID가 SQL Server 외부의 스토리지 컨테이너에 액세스할 수 있나요?
  • 파일이 단독으로 잠겨 있나요?