Azure Synapse Analytics 서버리스 SQL 풀을 사용하여 외부 스토리지에 액세스

Tip

Microsoft Fabric Data Warehouse는 데이터 레이크 기반의 엔터프라이즈 규모 관계형 웨어하우스로, 미래 대비 아키텍처, 기본 제공 AI 및 새로운 기능을 제공합니다. 데이터 웨어하우징이 처음이라면, Fabric Data Warehouse부터 시작하세요. 기존 전용 SQL 풀 워크로드는 Fabric으로 업그레이드함으로써 데이터 과학, 실시간 분석 및 보고 전반에 걸쳐 새로운 기능에 액세스할 수 있습니다.

이 문서에서는 사용자가 서버리스 SQL 풀의 Azure Storage 저장된 파일에서 데이터를 읽는 방법을 설명합니다. 사용자는 스토리지에 액세스할 수 있는 다음 옵션이 있습니다.

  • Azure Storage 파일에 대한 임시 쿼리를 사용하도록 설정하는 OPENROWSET 함수입니다.
  • 외부 파일 집합 위에 빌드된 미리 정의된 데이터 구조인 외부 테이블입니다.

사용자는 Microsoft Entra 통과 인증(Microsoft Entra 보안 주체의 경우 기본값) 및 SAS 인증(SQL 보안 주체의 경우 기본값)과 같은 제한 인증 방법을 사용할 수 있습니다.

OPENROWSET을 사용하여 파일 쿼리

OPENROWSET을 사용하면 사용자가 스토리지에 액세스할 수 있는 경우 Azure 스토리지에서 외부 파일을 쿼리할 수 있습니다. 서버리스 SQL 풀에 연결된 사용자는 다음 쿼리를 사용하여 Azure 스토리지에 있는 파일의 콘텐츠를 읽어야 합니다.

SELECT * FROM
 OPENROWSET(BULK 'https://<storage_account>.dfs.core.windows.net/<container>/<path>/*.parquet', format= 'parquet') as rows

사용자는 다음 액세스 규칙을 사용하여 스토리지에 액세스할 수 있습니다.

  • Microsoft Entra 사용자 - OPENROWSET 호출자의 Microsoft Entra ID를 사용하여 익명 액세스로 Azure Storage 액세스하거나 스토리지에 액세스합니다.
  • SQL 사용자 – OPENROWSET 익명 액세스를 사용하여 스토리지에 액세스하거나 SAS 토큰 또는 작업 영역의 관리 ID를 사용하여 가장할 수 있습니다.

SQL 보안 주체는 OPENROWSET을 사용하여 SAS 토큰 또는 작업 영역의 관리 ID로 보호되는 파일을 직접 쿼리할 수도 있습니다. SQL 사용자가 이 함수를 실행하는 경우 권한이 있는 ALTER ANY CREDENTIAL 전원 사용자는 함수의 URL과 일치하는 서버 범위 자격 증명(스토리지 이름 및 컨테이너 사용)을 만들고 OPENROWSET 함수 호출자에게 이 자격 증명에 대한 REFERENCES 권한을 부여해야 합니다.

EXECUTE AS somepoweruser

CREATE CREDENTIAL [https://<storage_account>.dfs.core.windows.net/<container>]
 WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = 'sas token';

GRANT REFERENCES ON CREDENTIAL::[https://<storage_account>.dfs.core.windows.net/<container>] TO sqluser

URL과 일치하는 서버 수준 CREDENTIAL이 없거나 SQL 사용자에게 이 자격 증명에 대한 참조 권한이 없는 경우 오류가 반환됩니다. SQL 보안 주체는 일부 Microsoft Entra 아이덴티티를 사용하여 가장할 수 없습니다.

메모

이 버전의 OPENROWSET은 기본 인증을 사용하여 빠르고 쉬운 데이터 탐색을 위해 설계되었습니다. 가장화 또는 관리 ID를 활용하려면, 다음 섹션에서 설명하는 DATA_SOURCE와 함께 OPENROWSET을 사용하세요.

OPENROWSET를 사용하여 데이터 원본 쿼리

OPENROWSET을 사용하면 사용자가 일부 외부 데이터 원본에 배치된 파일을 쿼리할 수 있습니다.

SELECT * FROM
 OPENROWSET(BULK 'file/path/*.parquet',
 DATA_SOURCE = MyAzureInvoices,
 FORMAT= 'parquet') as rows

이 쿼리를 실행하는 사용자는 파일에 액세스할 수 있어야 합니다. 사용자는 Microsoft Entra ID 또는 익명 액세스를 사용하여 파일에 직접 액세스할 수 없을 경우, SAS 토큰 또는 작업 영역의 관리 ID를 사용하여 가장해야 합니다.

DATABASE SCOPED CREDENTIAL 는 참조된 데이터 원본(현재 SAS 및 관리 ID)의 파일에 액세스하는 방법을 지정합니다. 고급 사용자는 CONTROL DATABASE 권한으로 스토리지에 접근하기 위한 DATABASE SCOPED CREDENTIAL을 생성하고, 데이터 소스의 URL과 사용해야 할 자격 증명을 지정하는 EXTERNAL DATA SOURCE을 만들어야 합니다.

EXECUTE AS somepoweruser;

-- Create MASTER KEY if it doesn't exists in database
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'some very strong password';

CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
 WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
 SECRET = '******srt=sco&amp;sp=rwac&amp;se=2017-02-01T00:55:34Z&amp;st=201********' ;

CREATE EXTERNAL DATA SOURCE MyAzureInvoices
 WITH ( LOCATION = 'https://<storage_account>.dfs.core.windows.net/<container>/<path>/' ,
 CREDENTIAL = AccessAzureInvoices) ;

OPENROWSET 함수를 실행하려면 호출자에게 다음 권한 중 하나가 있어야 합니다.

  • OPENROWSET을 실행할 수 있는 권한 중 하나입니다.
    • ADMINISTER BULK OPERATIONS는 로그인을 활성화하여 OPENROWSET 함수를 실행합니다.
    • ADMINISTER DATABASE BULK OPERATIONS는 데이터베이스 범위 사용자가 OPENROWSET 함수를 실행할 수 있게 합니다.
  • REFERENCES DATABASE SCOPED CREDENTIAL에서 참조되는 자격 증명에 대해 EXTERNAL DATA SOURCE

외부 테이블

테이블을 읽을 수 있는 권한이 있는 사용자는 Azure Storage 폴더 및 파일 집합 위에 만든 EXTERNAL TABLE을 사용하여 외부 파일에 액세스할 수 있습니다.

Azure Storage 데이터 원본 위에 테이블을 생성하려면 외부 테이블 생성 권한이 있는 사용자 (예: CREATE TABLE, ALTER ANY CREDENTIAL 또는 REFERENCES DATABASE SCOPED CREDENTIAL 필요)는 다음 스크립트를 사용할 수 있습니다.

CREATE EXTERNAL TABLE [dbo].[DimProductexternal]
( ProductKey int, ProductLabel nvarchar, ProductName nvarchar )
WITH
(
LOCATION='/DimProduct/year=*/month=*' ,
DATA_SOURCE = AzureDataLakeStore ,
FILE_FORMAT = TextFileFormat
) ;

이 테이블에서 데이터를 읽는 사용자는 파일에 액세스할 수 있어야 합니다. 사용자는 Microsoft Entra ID 또는 익명 액세스를 사용하여 파일에 직접 액세스할 수 없는 경우, SAS 토큰 또는 작업 영역의 관리 ID를 사용하여 가장해야 합니다.

DATABASE SCOPED CREDENTIAL은 참조된 데이터 원본의 파일에 액세스하는 방법을 지정합니다. CONTROL DATABASE 권한이 있는 사용자는 사용해야 하는 데이터 원본 및 자격 증명의 URL을 지정하는 스토리지 및 외부 데이터 원본에 액세스하는 데 사용할 DATABASE SCOPED CREDENTIAL을 만들어야 합니다.

EXECUTE AS somepoweruser;

-- Create MASTER KEY if it doesn't exists in database
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'some very strong password';

CREATE DATABASE SCOPED CREDENTIAL cred
 WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
 SECRET = '******srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=201********' ;

CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
 WITH ( LOCATION = 'https://<storage_account>.dfs.core.windows.net/<container>/<path>' ,
 CREDENTIAL = cred
 ) ;

EXTERNAL TABLE을 사용하여 외부 파일 읽기

EXTERNAL TABLE을 사용하면 표준 SQL SELECT 문을 사용하여 데이터 원본을 통해 참조되는 파일에서 데이터를 읽을 수 있습니다.

SELECT *
FROM dbo.DimProductsExternal

호출자는 데이터를 읽을 수 있는 다음 권한이 있어야 합니다.

  • SELECT 외부 테이블에 대한 권한
  • REFERENCES DATABASE SCOPED CREDENTIAL권한이 있는 경우 DATA SOURCECREDENTIAL

Permissions

다음 표에서는 위에 나열된 작업에 필요한 권한을 나열합니다.

Query 필요한 권한
데이터 원본이 없는 OPENROWSET(BULK) ADMINISTER BULK OPERATIONS, ADMINISTER DATABASE BULK OPERATIONS 및 SQL 로그인은 SAS로 보호되는 스토리지에 대한 REFERENCES CREDENTIAL::<URL>을(를) 가지고 있어야 합니다.
자격 증명이 없는 데이터 원본이 있는 OPENROWSET(BULK) ADMINISTER BULK OPERATIONS 또는 ADMINISTER DATABASE BULK OPERATIONS,
자격 증명이 있는 데이터 원본을 사용한 OPENROWSET(BULK) REFERENCES DATABASE SCOPED CREDENTIAL 및 다음 중 ADMINISTER BULK OPERATIONS 하나 또는 ADMINISTER DATABASE BULK OPERATIONS
외부 데이터 원본 만들기 ALTER ANY EXTERNAL DATA SOURCEREFERENCES DATABASE SCOPED CREDENTIAL
외부 테이블 생성 CREATE TABLE, ALTER ANY SCHEMA, ALTER ANY EXTERNAL FILE FORMATALTER ANY EXTERNAL DATA SOURCE
외부 테이블에서 선택 SELECT TABLEREFERENCES DATABASE SCOPED CREDENTIAL
CETAS 테이블을 만들려면 - CREATE TABLE, ALTER ANY SCHEMA, ALTER ANY DATA SOURCEALTER ANY EXTERNAL FILE FORMAT. 데이터를 읽으려면: ADMINISTER BULK OPERATIONS 또는 REFERENCES CREDENTIALSELECT TABLE 쿼리의 각 테이블/뷰/함수에 따라 + 스토리지에 대한 R/W 권한

다음 단계

이제 다음 방법 문서를 계속 진행할 준비가 되었습니다.