다음을 통해 공유


Azure Synapse Analytics에서 서버리스 SQL 풀을 사용하여 레이크 데이터베이스에 액세스

Azure Synapse Analytics 작업 영역을 사용하면 Spark 데이터 레이크 위에 두 가지 형식의 데이터베이스를 만들 수 있습니다.

  • 레이크 데이터베이스 Apache Spark Notebooks, 데이터베이스 템플릿 또는 Microsoft Dataverse(이전의 Common Data Service)를 사용하여 레이크 데이터 위에 테이블을 정의할 수 있습니다. 이러한 테이블은 서버리스 SQL 풀을 사용하여 T-SQL(Transact-SQL) 언어를 사용하여 쿼리하는 데 사용할 수 있습니다.
  • SQL 데이터베이스 서버리스 SQL 풀을 사용하여 직접 데이터베이스와 테이블을 정의할 수 있습니다. T-SQL CREATE DATABASE, CREATE EXTERNAL TABLE을 사용하여 개체를 정의하고 테이블 위에 추가 SQL 뷰, 프로시저 및 인라인 테이블 값 함수를 추가할 수 있습니다.

Diagram that shows Lake and SQL databases that are created on top of Data Lake files.

이 문서에서는 Azure Synapse Analytics의 서버리스 SQL 풀에 있는 레이크 데이터베이스에 중점을 둡니다.

Azure Synapse Analytics를 사용하면 Spark 또는 데이터베이스 디자이너를 사용하여 레이크 데이터베이스 및 테이블을 만든 다음 서버리스 SQL 풀을 사용하여 레이크 데이터베이스의 데이터를 분석할 수 있습니다. Apache Spark 풀, 데이터베이스 템플릿 또는 Dataverse에 만들어진 레이크 데이터베이스 및 테이블(parquet 또는 CSV 지원)은 서버리스 SQL 풀 엔진으로 쿼리하는 데 자동으로 사용할 수 있습니다. 수정된 레이크 데이터베이스 및 테이블은 잠시 후 서버리스 SQL 풀에서 사용할 수 있습니다. Spark 또는 Database 설계된 변경 내용이 서버리스에 나타날 때까지 지연이 있습니다.

레이크 데이터베이스 관리

Spark에서 만든 레이크 데이터베이스를 관리하려면 Apache Spark 풀이나 데이터베이스 디자이너를 사용하면 됩니다. 예를 들어 Spark 풀 작업을 통해 레이크 데이터베이스를 만들거나 삭제합니다. 서버리스 SQL 풀을 사용하여 레이크 데이터베이스 또는 레이크 데이터베이스의 개체를 만들 수 없습니다.

Spark default 데이터베이스는 서버리스 SQL 풀 컨텍스트에서 default라는 레이크 데이터베이스로 사용할 수 있습니다.

참고 항목

동일한 이름으로 서버리스 SQL 풀에 레이크 및 SQL 데이터베이스를 만들 수 없습니다.

레이크 데이터베이스의 테이블을 서버리스 SQL 풀에서 수정할 수 없습니다. 데이터베이스 디자이너 또는 Apache Spark 풀을 사용하여 레이크 데이터베이스를 수정합니다. 서버리스 SQL 풀을 사용하면 Transact-SQL 명령을 사용하여 레이크 데이터베이스에서 다음과 같이 변경할 수 있습니다.

  • 레이크 데이터베이스에서 뷰, 프로시저, 인라인 테이블 값 함수 추가, 변경 및 삭제.
  • 데이터베이스 범위 Microsoft Entra 사용자 추가 및 제거.
  • Microsoft Entra 데이터베이스 사용자를 db_datareader 역할에 추가하거나 제거합니다. db_datareader 역할의 Microsoft Entra 데이터베이스 사용자는 레이크 데이터베이스의 모든 테이블을 읽을 수 있는 권한이 있지만 다른 데이터베이스에서 데이터를 읽을 수는 없습니다.

보안 모델

레이크 데이터베이스와 테이블은 두 가지 수준에서 보호됩니다.

  • Microsoft Entra 사용자에게 다음 중 하나를 할당하여 기본 스토리지 계층:
    • Azure RBAC(Azure 역할 기반 액세스 제어)
    • Azure ABAC(Azure 특성 기반 액세스 제어) 역할
    • ACL 권한
  • Microsoft Entra 사용자를 정의하고 레이크 데이터를 참조하는 테이블에서 SELECT 데이터에 대한 SQL 권한을 부여할 수 있는 SQL 계층입니다.

레이크 보안 모델

레이크 데이터베이스 파일에 대한 액세스는 스토리지 계층에 대한 레이크 권한을 사용하여 제어됩니다. Microsoft Entra 사용자만 레이크 데이터베이스의 테이블을 사용할 수 있으며 자신의 ID를 사용하여 레이크의 데이터에 액세스할 수 있습니다.

사용자, 할당된 서비스 주체가 있는 Microsoft Entra 애플리케이션 또는 보안 그룹과 같은 보안 주체에게 외부 테이블에 사용되는 기본 데이터에 대한 액세스 권한을 부여할 수 있습니다. 데이터 액세스의 경우 다음 권한을 모두 부여합니다.

  • 파일(예: 테이블의 기본 데이터 파일)에 대한 read (R) 권한을 부여합니다.
  • 파일이 저장된 폴더와 루트까지 모든 부모 폴더에 대해 execute (X) 권한을 부여합니다. ACL(액세스 제어 목록) 페이지에서 이러한 권한에 대해 자세히 알아볼 수 있습니다.

예를 들어 https://<storage-name>.dfs.core.windows.net/<fs>/synapse/workspaces/<synapse_ws>/warehouse/mytestdb.db/myparquettable/에서 보안 주체에는 다음이 필요합니다.

  • <fs> 에서 myparquettable까지의 모든 폴더에 대한 execute (X) 권한.
  • myparquettable 및 해당 폴더 내의 파일에 대한 read (R) 권한, 데이터베이스(동기화 또는 원본 테이블)의 테이블을 읽을 수 있습니다.

보안 주체가 데이터베이스에 개체를 만들거나 데이터베이스의 개체를 삭제할 수 있는 기능이 필요한 경우 warehouse 폴더의 폴더와 파일에 대한 추가 write (W) 권한이 필요합니다. 데이터베이스 개체를 서버리스 SQL 풀에서는 수정할 수 없으며 Spark 풀 또는 데이터베이스 디자이너에서만 수정할 수 있습니다.

SQL 보안 모델

Azure Synapse 작업 영역은 서버리스 SQL 풀을 사용하여 레이크 데이터베이스를 쿼리할 수 있는 T-SQL 엔드포인트를 제공합니다. 데이터 액세스 외에도 SQL 인터페이스를 통해 테이블에 액세스할 수 있는 사용자를 제어할 수 있습니다. 사용자가 서버리스 SQL 풀을 사용하여 공유 레이크 데이터베이스에 액세스할 수 있도록 해야 합니다. 레이크 데이터베이스에 액세스할 수 있는 두 가지 형식의 사용자가 있습니다.

  • 관리자: 서버리스 SQL 풀 내에서 Synapse SQL 관리자 작업 영역 역할 또는 sysadmin 서버 수준 역할을 할당합니다. 이 역할은 모든 데이터베이스를 완전히 제어합니다. Synapse 관리자Synapse SQL 관리자 역할도 기본적으로 서버리스 SQL 풀의 모든 개체에 대한 모든 권한을 가집니다.
  • 작업 영역 읽기 권한자: 로그인이 모든 데이터베이스에 액세스하고 읽을 수 있도록 서버리스 SQL 풀에 대한 서버 수준 권한 GRANT CONNECT ANY DATABASEGRANT SELECT ALL USER SECURABLES를 로그인에 부여합니다. 이는 사용자에게 읽기 권한자/비관리자 액세스 권한을 할당하는 데 적합할 수 있습니다.
  • 데이터베이스 읽기 권한자: 레이크 데이터베이스의 Microsoft Entra ID에서 데이터베이스 사용자를 만들고 db_datareader 역할에 추가하면 사용자가 레이크 데이터베이스의 데이터를 읽을 수 있습니다.

여기에서 공유 데이터베이스에서 액세스 제어 설정을 자세히 알아보세요.

레이크 데이터베이스의 사용자 지정 SQL 개체

레이크 데이터베이스를 사용하면 스키마, 프로시저, 뷰, iTVF(인라인 테이블 값 함수)와 같은 사용자 지정 T-SQL 개체를 만들 수 있습니다. 사용자 지정 SQL 개체를 만들려면 개체를 배치할 스키마를 반드시 만들어야 합니다. 사용자 지정 SQL 개체는 Spark, 데이터베이스 디자이너 또는 Dataverse에 정의된 레이크 테이블용으로 예약되어 있으므로 dbo 스키마에 배치할 수 없습니다.

Important

SQL 개체를 배치할 사용자 지정 SQL 스키마를 만들어야 합니다. 사용자 지정 SQL 개체는 dbo 스키마에 배치할 수 없습니다. dbo 스키마는 원래 Spark 또는 데이터베이스 디자이너에서 만들어진 레이크 테이블용으로 예약되어 있습니다.

예제

레이크 데이터베이스에 SQL 데이터베이스 읽기 권한자 만들기

이 예에서는 공유 테이블을 통해 데이터를 읽을 수 있는 레이크 데이터베이스에 Microsoft Entra 사용자를 추가합니다. 사용자는 서버리스 SQL 풀을 통해 레이크 데이터베이스에 추가됩니다. 그런 다음 사용자가 데이터를 읽을 수 있도록 db_datareader 역할을 할당합니다.

CREATE USER [customuser@contoso.com] FROM EXTERNAL PROVIDER;
GO
ALTER ROLE db_datareader
ADD MEMBER [customuser@contoso.com];

작업 영역 수준 데이터 판독기 만들기

GRANT CONNECT ANY DATABASEGRANT SELECT ALL USER SECURABLES 권한으로 로그인은 서버리스 SQL 풀을 사용하여 모든 테이블을 읽을 수 있지만 SQL 데이터베이스를 만들거나 해당 테이블의 개체를 수정할 수는 없습니다.

CREATE LOGIN [wsdatareader@contoso.com] FROM EXTERNAL PROVIDER
GRANT CONNECT ANY DATABASE TO [wsdatareader@contoso.com]
GRANT SELECT ALL USER SECURABLES TO [wsdatareader@contoso.com]

이 스크립트를 사용하면 레이크 데이터베이스에서 테이블을 읽을 수 있는 관리자 권한 없이 사용자를 만들 수 있습니다.

서버리스 SQL 풀을 사용하여 Spark 데이터베이스 만들기 및 연결

먼저 작업 영역에서 이미 만든 Spark 클러스터를 사용하여 mytestdb라는 새 Spark 데이터베이스를 만듭니다. 예를 들어 Spark C# Notebook을 사용하는 경우 다음 .NET for Spark 문을 사용하면 됩니다.

spark.sql("CREATE DATABASE mytestlakedb")

잠시 후 서버리스 SQL 풀에 레이크 데이터베이스가 표시됩니다. 예를 들어 서버리스 SQL 풀에서 다음 명령문을 실행합니다.

SELECT * FROM sys.databases;

결과에 mytestlakedb이 포함되어 있는지 확인합니다.

레이크 데이터베이스에서 사용자 지정 SQL 개체 만들기

다음 예는 reports 스키마에서 사용자 지정 뷰, 프로시저 및 iTVF(인라인 테이블 값 함수)를 만드는 방법을 보여 줍니다.

CREATE SCHEMA reports
GO

CREATE OR ALTER VIEW reports.GreenReport
AS SELECT puYear, puMonth,
            fareAmount = SUM(fareAmount),
            tipAmount = SUM(tipAmount),
            mtaTax = SUM(mtaTax)
FROM dbo.green
GROUP BY puYear, puMonth
GO

CREATE OR ALTER PROCEDURE reports.GreenReportSummary
AS BEGIN
SELECT puYear, puMonth,
            fareAmount = SUM(fareAmount),
            tipAmount = SUM(tipAmount),
            mtaTax = SUM(mtaTax)
FROM dbo.green
GROUP BY puYear, puMonth
END
GO

CREATE OR ALTER FUNCTION reports.GreenDataReportMonthly(@year int)
RETURNS TABLE
RETURN ( SELECT puYear = @year, puMonth,
                fareAmount = SUM(fareAmount),
                tipAmount = SUM(tipAmount),
                mtaTax = SUM(mtaTax)
        FROM dbo.green
        WHERE puYear = @year
        GROUP BY puMonth )
GO

다음 단계