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 뷰, 프로시저 및 인라인 테이블 값 함수를 추가할 수 있습니다.
이 문서에서는 Azure Synapse Analytics의 서버리스 SQL 풀에 있는 레이크 데이터베이스에 중점을 둡니다.
Azure Synapse Analytics를 사용하면 Spark 또는 데이터베이스 디자이너를 사용하여 레이크 데이터베이스 및 테이블을 만든 다음 서버리스 SQL 풀을 사용하여 레이크 데이터베이스의 데이터를 분석할 수 있습니다. Apache Spark 풀, 레이크 데이터베이스 템플릿 또는 Dataverse에서 만든 레이크 데이터베이스 및 테이블(parquet 또는 CSV 지원)은 서버리스 SQL 풀 엔진을 사용하여 쿼리하는 데 자동으로 사용할 수 있습니다. 수정된 레이크 데이터베이스 및 테이블은 일정 시간 후에 서버리스 SQL 풀에서 사용할 수 있습니다. Spark 또는 데이터베이스 디자이너에서 변경한 내용이 서버리스로 표시될 때까지 지연이 있습니다.
레이크 데이터베이스 관리
Spark에서 만든 레이크 데이터베이스를 관리하려면 Apache Spark 풀 또는 데이터베이스 디자이너를 사용할 수 있습니다. 예를 들어 Spark 풀 작업을 통해 레이크 데이터베이스를 만들거나 삭제합니다. 서버리스 SQL 풀을 사용하여 레이크 데이터베이스 또는 레이크 데이터베이스의 개체를 만들 수 없습니다.
Spark default 데이터베이스는 서버리스 SQL 풀 컨텍스트에서 default라는 레이크 데이터베이스로 사용할 수 있습니다.
참고 항목
이름이 같은 서버리스 SQL 풀에는 레이크 및 SQL 데이터베이스를 만들 수 없습니다.
레이크 데이터베이스의 테이블은 서버리스 SQL 풀에서 수정할 수 없습니다. 데이터베이스 디자이너 또는 Apache Spark 풀을 사용하여 레이크 데이터베이스를 수정합니다. 서버리스 SQL 풀을 사용하면 T-SQL 명령을 사용하여 레이크 데이터베이스에서 다음과 같이 변경할 수 있습니다.
- Lake 데이터베이스에서 뷰, 프로시저, 인라인 테이블 값 함수를 추가, 변경 및 삭제합니다.
- 데이터베이스 범위 Microsoft Entra 사용자를 추가하고 제거합니다.
- Microsoft Entra 데이터베이스 사용자를 db_datareader 역할에 추가하거나 제거합니다. db_datareader 역할의 Microsoft Entra 데이터베이스 사용자에게는 Lake 데이터베이스의 모든 테이블을 읽을 수 있는 권한이 있지만 다른 데이터베이스에서 데이터를 읽을 수는 없습니다.
보안 모델
레이크 데이터베이스와 테이블은 두 가지 수준에서 보호됩니다.
- Microsoft Entra 사용자에게 다음 중 하나를 할당하여 기본 스토리지 계층:
- Azure RBAC(Azure 역할 기반 액세스 제어)
- Azure ABAC(Azure 특성 기반 액세스 제어) 역할
- ACL(액세스 제어 목록) 권한
- Microsoft Entra 사용자를 정의하고 레이크 데이터를 참조하는 테이블의 데이터에 SQL 권한을 부여할
SELECT수 있는 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)권한, 데이터베이스(동기화 또는 원본 테이블)의 테이블을 읽을 수 있습니다.
보안 주체가 데이터베이스에 개체를 만들거나 개체를 삭제하는 기능이 필요한 경우 웨어하우스 폴더의 폴더 및 파일에 대한 추가 write (W) 권한이 필요합니다. 서버리스 SQL 풀에서는 Spark 풀 또는 데이터베이스 디자이너에서만 데이터베이스의 개체를 수정할 수 없습니다.
SQL 보안 모델
Azure Synapse 작업 영역은 서버리스 SQL 풀을 사용하여 Lake 데이터베이스를 쿼리할 수 있는 T-SQL 엔드포인트를 제공합니다. SQL 인터페이스를 사용하면 데이터 액세스 외에도 테이블에 액세스할 수 있는 사용자를 제어할 수 있습니다. 사용자가 서버리스 SQL 풀을 사용하여 공유 레이크 데이터베이스에 액세스할 수 있도록 해야 합니다. 레이크 데이터베이스에 액세스할 수 있는 두 가지 형식의 사용자가 있습니다.
- 관리자: 서버리스 SQL 풀 내에서 Synapse SQL 관리자 작업 영역 역할 또는 sysadmin 서버 수준 역할을 할당합니다. 이 역할은 모든 데이터베이스를 완전히 제어합니다. Synapse 관리자 및 Synapse SQL 관리자 역할도 기본적으로 서버리스 SQL 풀의 모든 개체에 대한 모든 권한을 가집니다.
- 작업 영역 읽기 권한자: 서버 수준 권한을 부여하여 GRANT CONNECT ANY DATABASE 및 GRANT SELECT ALL USER SECURABLES on serverless SQL 풀을 로그인에 부여하여 로그인이 모든 데이터베이스에 액세스하고 읽을 수 있도록 합니다. 이는 사용자에게 읽기 권한자/비관리자 액세스 권한을 할당하는 데 적합할 수 있습니다.
- 데이터베이스 판독기: Lake 데이터베이스의 Microsoft Entra ID에서 데이터베이스 사용자를 만들고 db_datareader 역할에 추가하여 Lake 데이터베이스에서 데이터를 읽을 수 있도록 합니다.
공유 데이터베이스에서 액세스 제어를 설정하는 방법에 대해 자세히 알아봅니다.
레이크 데이터베이스의 사용자 지정 SQL 개체
레이크 데이터베이스를 사용하면 스키마, 프로시저, 뷰, iTVF(인라인 테이블 값 함수)와 같은 사용자 지정 T-SQL 개체를 만들 수 있습니다. 사용자 지정 SQL 개체를 만들려면 개체를 배치할 스키마를 반드시 만들어야 합니다. 사용자 지정 SQL 개체는 Spark, 데이터베이스 디자이너 또는 Dataverse에 dbo 정의된 레이크 테이블에 대해 예약되어 있으므로 스키마에 배치할 수 없습니다.
Important
SQL 개체를 배치할 사용자 지정 SQL 스키마를 만들어야 합니다. 사용자 지정 SQL 개체는 스키마에 dbo 배치할 수 없습니다.
dbo 스키마는 원래 Spark 또는 데이터베이스 디자이너에서 만들어진 레이크 테이블용으로 예약되어 있습니다.
예제
레이크 데이터베이스에 SQL 데이터베이스 읽기 권한자 만들기
이 예제에서는 공유 테이블을 통해 데이터를 읽을 수 있는 Microsoft Entra 사용자를 Lake 데이터베이스에 추가합니다. 사용자는 서버리스 SQL 풀을 통해 레이크 데이터베이스에 추가됩니다. 그런 다음 사용자가 데이터를 읽을 수 있도록 db_datareader 역할을 할당합니다.
CREATE USER [customuser@contoso.com] FROM EXTERNAL PROVIDER;
GO
ALTER ROLE db_datareader
ADD MEMBER [customuser@contoso.com];
작업 영역 수준 데이터 판독기 만들기
GRANT CONNECT ANY DATABASE 및 GRANT 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]
이 스크립트를 사용하면 Lake 데이터베이스에서 테이블을 읽을 수 있는 관리자 권한 없이 사용자를 만들 수 있습니다.
서버리스 SQL 풀을 사용하여 Spark 데이터베이스 만들기 및 연결
먼저 작업 영역에서 이미 만든 Spark 클러스터를 사용하여 명명된 mytestlakedb 새 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