Aracılığıyla paylaş


Azure Synapse Analytics'te sunucusuz SQL havuzunu kullanarak dış depolamaya erişme

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

  • OpenROWSET işlevi, Azure Depolama'daki dosyalar üzerinde geçici sorgular sağlar.
  • Dış tablo , dış dosya kümesinin üzerine kurulmuş önceden tanımlanmış bir veri yapısıdır.

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'ya 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 çalışma alanının SAS belirteci veya Yönetilen kimliği kullanılarak taklit edilebilir.
  • Sahtecilik
  • doğrudan erişim

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üttüğünde, ALTER ANY CREDENTIAL iznine sahip bir yetkili kullanıcı, işlevdeki URL ile eşleşen (depolama adı ve kapsayıcı kullanarak) sunucu kapsamlı bir kimlik bilgisi oluşturmalı ve OPENROWSET işlevini çağıran kişiye 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.

Uyarı

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. Dosyalara kendi Microsoft Entra kimlikleri veya anonim erişimkullanarak 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.

  • Kimlik Sahteciliği
  • doğrudan erişim

DATABASE SCOPED CREDENTIAL, başvuruda bulunan veri kaynağındaki dosyalara (şu anda SAS ve Yönetilen Kimlik) nasıl erişildiğini belirtir. CONTROL DATABASE izni olan power user'ın depolamaya erişmek için kullanılacak DATABASE SCOPED CREDENTIAL oluşturması ve kullanılacak veri kaynağının VE kimlik bilgilerinin URL'sini 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 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ı kapsamındaki kullanıcının OPENROWSET işlevini yürütmesini sağlar.
  • EXTERNAL DATA SOURCE'de atıfta bulunulan kimlik bilgisine REFERENCES DATABASE SCOPED CREDENTIAL.

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şturmak için izinlerine sahip 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. Kullanıcılar, Microsoft Entra kimlikleri veya anonim erişimkullanarak dosyalara doğrudan erişemiyorsa, SAS belirteci veya çalışma alanı için Yönetilen Kimlik kullanılarak kimliklerine bürünülmeleri gerekir.

  • Kimliğe Bürünme
  • doğrudan erişim

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:

  • dış tabloda SELECT izni AÇIK
  • REFERENCES DATABASE SCOPED CREDENTIAL izni varsa DATA SOURCECREDENTIAL

İzinler

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

Soru Gerekli izinler
Veri kaynağı olmadan OPENROWSET(BULK) ADMINISTER BULK OPERATIONS, ADMINISTER DATABASE BULK OPERATIONSveya SQL oturum açma bilgileri, SAS korumalı depolama için REFERANS KİMLİK BİLGİLERİ::<URL>'e sahip olmalıdır.
Kimlik bilgisi olmadan veri kaynağı ile OPENROWSET(BULK) kullanımı ADMINISTER BULK OPERATIONS veya ADMINISTER DATABASE BULK OPERATIONS.
Kimlik bilgilerine sahip veri kaynağı ile OPENROWSET(BULK) REFERENCES DATABASE SCOPED CREDENTIAL ve ADMINISTER BULK OPERATIONS veya ADMINISTER DATABASE BULK OPERATIONS'den biri
DıŞ VERI KAYNAĞı OLUŞTURMA ALTER ANY EXTERNAL DATA SOURCE ve REFERENCES DATABASE SCOPED CREDENTIAL
Harici Tablo Oluştur 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: sorgudaki her tablo/görünüm/işlev için ADMINISTER BULK OPERATIONS veya REFERENCES CREDENTIAL ya da SELECT TABLE + Depolama üzerindeki R/W izni

Sonraki adımlar

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