Aracılığıyla paylaş


Azure Synapse Analytics’te sunucusuz SQL havuzunu kullanarak dış depolama alanına erişme

Bu makalede, kullanıcıların sunucusuz SQL havuzunda Azure Depolama depolanan dosyalardan verileri nasıl okuyabileceği açıklanmaktadır. Kullanıcılar depolamaya erişmek için aşağıdaki seçeneklere sahiptir:

Kullanıcı, Microsoft Entra geçiş kimlik doğrulaması (Microsoft Entra sorumluları için varsayılan) ve SAS kimlik doğrulaması (SQL sorumluları için varsayılan) gibi farklı kimlik doğrulama yöntemleri kullanabilir.

OPENROWSET kullanarak dosyaları sorgulama

OPENROWSET, kullanıcıların depolama alanına erişimi varsa Azure depolamadaki dış dosyaları sorgulamasına olanak tanır. Sunucusuz SQL havuzuna bağlı bir kullanıcı, Azure depolamadaki dosyaların içeriğini okumak için aşağıdaki sorguyu kullanmalıdır:

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

Kullanıcı aşağıdaki erişim kurallarını kullanarak depolamaya erişebilir:

  • Microsoft Entra kullanıcısı - OPENROWSET Azure Depolama erişmek veya anonim erişimle depolamaya erişmek için çağıranın Microsoft Entra kimliğini kullanır.
  • SQL kullanıcısı – OPENROWSET anonim erişimle depolamaya erişecek veya SAS belirteci veya Çalışma alanının Yönetilen kimliği kullanılarak kimliğine bürünülebilir.

SQL sorumluları, ÇALıŞMA alanının SAS belirteçleri veya Yönetilen Kimliği ile korunan dosyaları doğrudan sorgulamak için OPENROWSET'i de kullanabilir. Bir SQL kullanıcısı bu işlevi yürütürse, izni olan ALTER ANY CREDENTIAL bir güç kullanıcı işlevindeki URL ile eşleşen (depolama adı ve kapsayıcı kullanarak) sunucu kapsamlı bir kimlik bilgisi oluşturmalı ve OPENROWSET işlevini çağırana bu kimlik bilgisi için REFERENCES izni vermelidir:

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 ile eşleşen sunucu düzeyinde KIMLIK BILGISI yoksa veya SQL kullanıcısının bu kimlik bilgisi için başvuru izni yoksa hata döndürülür. SQL sorumluları bazı Microsoft Entra kimliklerini kullanarak kimliğine bürünemez.

Dekont

OPENROWSET'in bu sürümü, varsayılan kimlik doğrulaması kullanılarak hızlı ve kolay veri keşfi için tasarlanmıştır. Kimliğe bürünme veya Yönetilen Kimlik'i kullanmak için, sonraki bölümde açıklanan DATA_SOURCE ile OPENROWSET'i kullanın.

OPENROWSET kullanarak veri kaynaklarını sorgulama

OPENROWSET, kullanıcının bazı dış veri kaynaklarına yerleştirilen dosyaları sorgulamasına olanak tanır:

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

Bu sorguyu yürüten kullanıcının dosyalara erişebilmesi gerekir. Microsoft Entra kimliklerini veya anonim erişimlerini kullanarak dosyalara doğrudan erişemiyorlarsa, kullanıcıların SAS belirteci veya Çalışma alanının Yönetilen Kimliği kullanılarak kimliğine bürünülmeleri gerekir.

DATABASE SCOPED CREDENTIAL , başvuruda bulunan veri kaynağındaki dosyalara (şu anda SAS ve Yönetilen Kimlik) nasıl erişildiğini belirtir. İzinli CONTROL DATABASE power user'ın depolamaya erişmek için kullanılacak ve EXTERNAL DATA SOURCE kullanılacak veri kaynağının URL'sini ve kimlik bilgilerini belirten bir oluşturması DATABASE SCOPED CREDENTIAL gerekir:

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) ;

Çağıranın OPENROWSET işlevini yürütmek için aşağıdaki izinlerden birine sahip olması gerekir:

  • OPENROWSET yürütme izinlerinden biri:
    • ADMINISTER BULK OPERATIONS OPENROWSET işlevini yürütmek için oturum açmayı etkinleştirir.
    • ADMINISTER DATABASE BULK OPERATIONS veritabanı kapsamlı kullanıcının OPENROWSET işlevini yürütmesini sağlar.
  • REFERENCES DATABASE SCOPED CREDENTIAL içinde başvuruda bulunan kimlik bilgilerine geçin EXTERNAL DATA SOURCE.

DıŞ TABLO

Tabloyu okuma izinlerine sahip olan kullanıcı, Azure Depolama klasörleri ve dosyaları kümesi üzerinde oluşturulan bir EXTERNAL TABLE kullanarak dış dosyalara erişebilir.

Dış tablo oluşturma izinleri olan kullanıcı (örneğin CREATE TABLE ve ALTER ANY CREDENTIAL veya REFERENCES DATABASE SCOPED CREDENTIAL) Azure Depolama veri kaynağının üzerinde bir tablo oluşturmak için aşağıdaki betiği kullanabilir:

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

Bu tablodan veri okuyan kullanıcının dosyalara erişebilmesi gerekir. Microsoft Entra kimliklerini veya anonim erişimlerini kullanarak dosyalara doğrudan erişemiyorlarsa, kullanıcıların SAS belirteci veya Çalışma alanının Yönetilen Kimliği kullanılarak kimliğine bürünülmeleri gerekir.

DATABASE SCOPED CREDENTIAL, başvuruda bulunan veri kaynağındaki dosyalara nasıl erişeceklerini belirtir. CONTROL DATABASE iznine sahip kullanıcının, depolamaya erişmek için kullanılacak DATABASE SCOPED CREDENTIAL ve kullanılması gereken veri kaynağının URL'sini ve kimlik bilgilerini belirten EXTERNAL DATA SOURCE oluşturması gerekir:

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 ile dış dosyaları okuma

EXTERNAL TABLE, standart SQL SELECT deyimini kullanarak veri kaynağı aracılığıyla başvuruda bulunılan dosyalardan verileri okumanızı sağlar:

SELECT *
FROM dbo.DimProductsExternal

Çağıranın verileri okumak için aşağıdaki izinlere sahip olması gerekir:

  • SELECT dış tablo üzerinde izin
  • REFERENCES DATABASE SCOPED CREDENTIALizni varsa DATA SOURCECREDENTIAL

İzinler

Aşağıdaki tabloda, yukarıda listelenen işlemler için gerekli izinler listelenmiştir.

Sorgu Gerekli izinler
Veri kaynağı olmadan OPENROWSET(BULK) ADMINISTER BULK OPERATIONS, ADMINISTER DATABASE BULK OPERATIONSveya SQL oturum açma bilgileri SAS korumalı depolama için REFERENCES CREDENTIAL::<URL> olmalıdır
Kimlik bilgisi olmadan veri kaynağı ile OPENROWSET(BULK) ADMINISTER BULK OPERATIONS veya ADMINISTER DATABASE BULK OPERATIONS,
Kimlik bilgilerine sahip veri kaynağı ile OPENROWSET(BULK) REFERENCES DATABASE SCOPED CREDENTIALve veya ADMINISTER BULK OPERATIONSADMINISTER DATABASE BULK OPERATIONS
CREATE EXTERNAL DATA SOURCE ALTER ANY EXTERNAL DATA SOURCE ve REFERENCES DATABASE SCOPED CREDENTIAL
DıŞ TABLO OLUŞTURMA CREATE TABLE, ALTER ANY SCHEMA, ALTER ANY EXTERNAL FILE FORMATve ALTER ANY EXTERNAL DATA SOURCE
DıŞ TABLODAN SEÇ SELECT TABLE ve REFERENCES DATABASE SCOPED CREDENTIAL
CETAS Tablo oluşturmak için : CREATE TABLE, ALTER ANY SCHEMA, ALTER ANY DATA SOURCEve ALTER ANY EXTERNAL FILE FORMAT. Verileri okumak için: ADMINISTER BULK OPERATIONS veya REFERENCES CREDENTIALSELECT TABLE sorgudaki her tablo/görünüm/işlev için + depolama üzerinde R/W izni

Sonraki adımlar

Artık aşağıdaki Nasıl Yapılır makaleleriyle devam etmeye hazırsınız: