Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Sunucusuz SQL havuzu sorgusu dosyaları doğrudan Azure Depolama'dan okur. Azure depolamadaki dosyalara erişim izinleri iki düzeyde denetlenmektedir:
- Depolama düzeyi - Kullanıcının temel alınan depolama dosyalarına erişme izni olmalıdır. Depolama yöneticiniz, Microsoft Entra sorumlusuna dosyaları okuma/yazma veya depolamaya erişmek için kullanılacak paylaşılan erişim imzası (SAS) anahtarı oluşturma izni vermelidir.
-
SQL hizmet düzeyi - Kullanıcının dış tablo kullanarak verileri okuma veya işlevi yürütme
OPENROWSETizni vermesi gerekir. Bu bölümde gereken izinler hakkında daha fazla bilgi edinin.
Bu makalede, kullanabileceğiniz kimlik bilgileri türleri ve SQL ve Microsoft Entra kullanıcıları için kimlik bilgisi aramanın nasıl işlendiği açıklanmaktadır.
Depolama izinleri
Synapse Analytics çalışma alanındaki sunucusuz SQL havuzu, Azure Data Lake depolamada depolanan dosyaların içeriğini okuyabilir. SQL sorgusu yürüten bir kullanıcının dosyaları okumasını sağlamak için depolama izinlerini yapılandırmanız gerekir. Dosyalara erişimi etkinleştirmek için üç yöntem vardır:
- Rol tabanlı erişim denetimi (RBAC), depolama alanınızın yerleştirildiği kiracıdaki bazı Microsoft Entra kullanıcılarına rol atamanızı sağlar. A reader must be a member of the Storage Blob Data Reader, Storage Blob Data Contributor, or Storage Blob Data Owner role on the storage account. Azure depolama alanına veri yazan bir kullanıcının Depolama Blob Verileri Katkıda Bulunanı veya Depolama Blob Veri Sahibi rolünün üyesi olması gerekir. Depolama Sahibi rolü, kullanıcının aynı zamanda Depolama Veri Sahibi olduğunu göstermez.
- Erişim Denetim Listeleri (ACL), Azure depolamadaki dosyalar ve dizinler üzerinde ayrıntılı Okuma(R), Yazma(W) ve Yürütme(X) izinleri tanımlamanızı sağlar. ACL, Microsoft Entra kullanıcılarına atanabilir. Okuyucuların Azure Depolama’daki bir yolda bulunan bir dosyayı okuyabilmeleri için dosya yolundaki tüm klasörlerde Yürütme (X) ACL izinlerine ve dosyanın kendisinde Okuma (R) ACL iznine sahip olmaları gerekir. Depolama katmanında ACL izinlerini ayarlama hakkında daha fazla bilgi edinin.
- Paylaşılan erişim imzası (SAS), okuyucunun Azure Data Lake depolamadaki dosyalara sınırlı zaman belirteci kullanarak erişmesini sağlar. Okuyucunun Microsoft Entra kullanıcısı olarak kimliğinin doğrulanması bile gerekmez. SAS belirteci, okuyucuya verilen izinleri ve belirtecin geçerli olduğu süreyi içerir. SAS token is good choice for time-constrained access to any user that doesn't even need to be in the same Microsoft Entra tenant. SAS belirteci depolama hesabında veya belirli dizinlerde tanımlanabilir. Paylaşılan erişim imzalarını kullanarak Azure Depolama kaynaklarına sınırlı erişim izni verme hakkında daha fazla bilgi edinin.
Alternatif olarak anonim erişime izin vererek dosyalarınızı herkese açık hale getirebilirsiniz. Bu yaklaşım, nonpublic verileriniz varsa KULLANILMAMALIDIR.
Desteklenen depolama yetkilendirme türleri
Sunucusuz SQL havuzunda oturum açmış bir kullanıcının, dosyalar genel kullanıma açık değilse Azure Depolama'daki dosyalara erişme ve bu dosyaları sorgulama yetkisine sahip olması gerekir. Abonelik dışı depolamaya erişmek için dört yetkilendirme türü kullanabilirsiniz: kullanıcı kimliği, paylaşılan erişim imzası, hizmet sorumlusu ve yönetilen kimlik.
Note
Microsoft Entra geçişi çalışma alanı oluşturulduğunda varsayılan davranıştır.
"Microsoft Entra geçişi" olarak da bilinen kullanıcı kimliği, sunucusuz SQL havuzunda oturum açan Microsoft Entra kullanıcısının kimliğinin veri erişimini yetkilendirmek için kullanıldığı bir yetkilendirme türüdür. Verilere erişmeden önce Azure Depolama yöneticisinin Microsoft Entra kullanıcısına izin vermesi gerekir. Veritabanı kullanıcıları için desteklenen yetkilendirme türleri tablosunda belirtildiği gibi, SQL kullanıcı türü için desteklenmez.
Önemli
Microsoft Entra kimlik doğrulama belirteci istemci uygulamaları tarafından önbelleğe alınmış olabilir. Örneğin Power BI, Microsoft Entra belirteçlerini önbelleğe alır ve aynı belirteci bir saat boyunca yeniden kullanabilir. Sorgu yürütülürken belirtecin süresi dolarsa, uzun süreli sorgular başarısız olabilir. Sorgunun ortasında süresi dolan Microsoft Entra erişim belirtecinin neden olduğu sorgu hatalarıyla karşılaşıyorsanız, hizmet sorumlusuna, yönetilen kimliğe veya paylaşılan erişim imzasına geçmeyi göz önünde bulundurun.
Verilere erişmek için kimliğinizi kullanmak için Depolama Blob Veri Sahibi, Depolama Blob Verileri Katkıda Bulunanı veya Depolama Blob Veri Okuyucusu rolünün üyesi olmanız gerekir. Alternatif olarak, dosya ve klasörlere erişmek için ayrıntılı ACL kuralları belirtebilirsiniz. Depolama Hesabının Sahibi olsanız bile, yine de kendinizi Depolama Blob Verileri rollerinden birine eklemeniz gerekir. Azure Data Lake Store 2. Nesil'de erişim denetimi hakkında daha fazla bilgi edinmek için Azure Data Lake Storage 2. Nesil erişim denetimi makalesini gözden geçirin.
Kiracılar arası senaryolar
Azure Depolama Synapse sunucusuz SQL havuzundan farklı bir kiracıda olduğunda, önerilen yöntem Hizmet Sorumlusu aracılığıyla yetkilendirmedir. Yönetilen Kimlik desteklenmezken SAS yetkilendirmesi de mümkündür.
| Yetkilendirme Türü | Güvenlik duvarı korumalı depolama alanı | Güvenlik duvarı olmayan korumalı depolama |
|---|---|---|
| SAS | Desteklenir | Desteklenir |
| Hizmet Sorumlusu | Desteklenmiyor | Desteklenir |
Note
Azure Depolama bir Azure Depolama güvenlik duvarı tarafından korunuyorsa Hizmet Sorumlusu desteklenmez.
Veritabanları kullanıcıları için desteklenen yetkilendirme türleri
Aşağıdaki tabloda, Azure Synapse Analytics sunucusuz SQL uç noktasında farklı oturum açma yöntemleri için kullanılabilir Azure Depolama yetkilendirme türleri sağlanır:
| Yetki türü | SQL kullanıcısı | Microsoft Entra kullanıcısı | Service principal |
|---|---|---|---|
| Kullanıcı Kimliği | Desteklenmiyor | Desteklenir | Desteklenir |
| SAS | Desteklenir | Desteklenir | Desteklenir |
| Service principal | Desteklenir | Desteklenir | Desteklenir |
| Managed Identity | Desteklenir | Desteklenir | Desteklenir |
Desteklenen depolama ve yetkilendirme türleri
Yetkilendirme türlerinin ve Azure Depolama türlerinin aşağıdaki birleşimlerini kullanabilirsiniz:
| Yetki türü | Blob Storage | ADLS Gen1 | ADLS Gen2 |
|---|---|---|---|
| SAS | Desteklenir | Desteklenmez | Desteklenir |
| Service principal | Desteklenir | Desteklenir | Desteklenir |
| Managed Identity | Desteklenir | Desteklenir | Desteklenir |
| Kullanıcı Kimliği | Desteklenir | Desteklenir | Desteklenir |
Kiracılar arası senaryolar
Azure Depolama'nın Azure Synapse Analytics sunucusuz SQL havuzundan farklı bir kiracıda olduğu durumlarda, önerilen yöntem hizmet sorumlusu aracılığıyla yetkilendirmedir. Paylaşılan erişim imzası yetkilendirmesi de mümkündür. Yönetilen hizmet kimliği desteklenmez.
| Yetkilendirme Türü | Güvenlik duvarı korumalı depolama alanı | Güvenlik duvarı olmayan korumalı depolama |
|---|---|---|
| SAS | Desteklenir | Desteklenir |
| Service principal | Desteklenmiyor | Desteklenir |
Note
Azure Depolama bir Azure Depolama güvenlik duvarı tarafından korunuyorsa ve başka bir kiracıdaysa hizmet sorumlusu desteklenmez. Bunun yerine, paylaşılan erişim imzası (SAS) kullanın.
Güvenlik duvarı korumalı depolama alanı
Bir kaynak örneği kuralı oluşturarak depolama hesaplarını belirli bir sunucusuz SQL havuzuna erişime izin verecek şekilde yapılandırabilirsiniz. Güvenlik duvarıyla korunan depolama alanına erişirken Kullanıcı Kimliği veya Yönetilen Kimlik kullanın.
Note
Azure Depolama'daki güvenlik duvarı özelliği genel önizleme aşamasındadır ve tüm genel bulut bölgelerinde kullanılabilir.
Aşağıdaki tabloda, Azure Synapse Analytics sunucusuz SQL uç noktasında farklı oturum açma yöntemleri için güvenlik duvarı korumalı Azure Depolama yetkilendirme türleri sağlanır:
| Yetki türü | SQL kullanıcısı | Microsoft Entra kullanıcısı | Service principal |
|---|---|---|---|
| Kullanıcı Kimliği | Desteklenmiyor | Desteklenir | Desteklenir |
| SAS | Desteklenmiyor | Desteklenmiyor | Desteklenmiyor |
| Service principal | Desteklenmiyor | Desteklenmiyor | Desteklenmiyor |
| Managed Identity | Desteklenir | Desteklenir | Desteklenir |
Kullanıcı kimliği aracılığıyla güvenlik duvarıyla korunan depolamaya erişmek için Azure portalını veya Az.Storage PowerShell modülünü kullanabilirsiniz.
Azure portalı aracılığıyla Azure Depolama güvenlik duvarı yapılandırması
- Azure portalında Depolama Hesabınızı arayın.
- In the main navigation menu, go to Networking under Settings.
- Kaynak örnekleri bölümünde Azure Synapse çalışma alanınız için bir özel durum ekleyin.
-
Microsoft.Synapse/workspacesbir Kaynak türü olarak seçin. - Çalışma alanınızın adını Örnek adı olarak seçin.
- Kaydet'i seçin.
PowerShell aracılığıyla Azure Depolama güvenlik duvarı yapılandırması
Depolama hesabınızı yapılandırmak ve Azure Synapse çalışma alanı için özel durum eklemek için bu adımları izleyin.
PowerShell'i açın veya PowerShell'i yükleyin.
Aşağıdaki betikte olduğu gibi Az.Storage modülünün ve Az.Synapse modülünün en son sürümlerini yükleyin:
Install-Module -Name Az.Storage -RequiredVersion 3.4.0 Install-Module -Name Az.Synapse -RequiredVersion 0.7.0Önemli
En az 3.4.0 sürümünü kullandığınızdan emin olun. Şu komutu çalıştırarak Az.Storage sürümünüzü de kontrol edebilirsiniz:
Get-Module -ListAvailable -Name Az.Storage | Select VersionAzure Kiracınıza bağlanın:
Connect-AzAccountPowerShell'de değişkenleri tanımlama:
- Kaynak grubu adı : Bunu Azure portalında depolama hesabınıza genel bakış bölümünde bulabilirsiniz.
- Hesap Adı - Güvenlik duvarı kurallarıyla korunan depolama hesabının adı.
- Kiracı Kimliği - Bunu Azure portalında, Microsoft Entra Id'de, Özellikler'in altında, Kiracı özellikleri'nde bulabilirsiniz.
- Çalışma Alanı Adı - Azure Synapse çalışma alanının adı.
$resourceGroupName = "<resource group name>" $accountName = "<storage account name>" $tenantId = "<tenant id>" $workspaceName = "<Azure Synapse workspace name>" $workspace = Get-AzSynapseWorkspace -Name $workspaceName $resourceId = $workspace.Id $index = $resourceId.IndexOf("/resourceGroups/", 0) # Replace G with g - /resourceGroups/ to /resourcegroups/ $resourceId = $resourceId.Substring(0,$index) + "/resourcegroups/" ` + $resourceId.Substring($index + "/resourceGroups/".Length) $resourceIdÖnemli
PowerShell betiği tarafından döndürülen değerinin
$resourceidşu şablonla eşleşmesi gerekir:/subscriptions/{subscription-id}/resourcegroups/{resource-group}/providers/Microsoft.Synapse/workspaces/{name-of-workspace}Kaynak gruplarını küçük harfle yazmak önemlidir.Azure depolama hesabı ağ kuralı ekleyin:
$parameters = @{ ResourceGroupName = $resourceGroupName Name = $accountName TenantId = $tenantId ResourceId = $resourceId } Add-AzStorageAccountNetworkRule @parametersDepolama hesabı güvenlik duvarınıza depolama hesabı ağ kuralının uygulandığını doğrulayın. Aşağıdaki PowerShell betiği, önceki adımlardan
$resourceidgelen değişkeni depolama hesabı ağ kuralının çıkışıyla karşılaştırır.$parameters = @{ ResourceGroupName = $resourceGroupName Name = $accountName } $rule = Get-AzStorageAccountNetworkRuleSet @parameters $rule.ResourceAccessRules | ForEach-Object { if ($_.ResourceId -cmatch "\/subscriptions\/(\w\-*)+\/resourcegroups\/(.)+") { Write-Host "Storage account network rule is successfully configured." -ForegroundColor Green $rule.ResourceAccessRules } else { Write-Host "Storage account network rule is not configured correctly. Remove this rule and follow the steps in detail." -ForegroundColor Red $rule.ResourceAccessRules } }
Kimlik Bilgileri
Azure Depolama'da bulunan bir dosyayı sorgulamak için sunucusuz SQL havuzu uç noktanızın kimlik doğrulama bilgilerini içeren bir kimlik bilgilerine sahip olması gerekir. İki tür kimlik bilgisi kullanılır:
- Sunucu düzeyindeki kimlik bilgisi,
OPENROWSETişlevi kullanılarak yürütülen geçici sorgular için kullanılır. Kimlik bilgisi adı depolama URL'si ile eşleşmelidir. - A database-scoped credential is used for external tables. External table references
DATA SOURCEwith the credential that should be used to access storage.
Kimlik bilgilerini yönetme izinleri verme
Kimlik bilgilerini yönetme yeteneği vermek için:
Bir kullanıcının sunucu düzeyinde kimlik bilgileri oluşturmasına veya bırakmasına izin vermek için, yöneticinin
ALTER ANY CREDENTIALana veritabanında oturum açma izni vermesi gerekir. Örneğin:GRANT ALTER ANY CREDENTIAL TO [login_name];Bir kullanıcının veritabanı kapsamlı kimlik bilgileri oluşturmasına veya bırakmasına izin vermek için, yöneticinin
CONTROLveritabanındaki izni kullanıcı veritabanındaki veritabanı kullanıcısına vermesi gerekir. Örneğin:GRANT CONTROL ON DATABASE::[database_name] TO [user_name];
Kimlik bilgilerini kullanma izinleri verme
Dış depolama alanına erişen veritabanı kullanıcılarının kimlik bilgilerini kullanma izni olmalıdır. Kimlik bilgilerini kullanmak için, kullanıcının belirli bir kimlik iznine sahip olması gerekir REFERENCES.
Oturum açma için sunucu düzeyinde kimlik bilgilerine izin vermek REFERENCES için ana veritabanında aşağıdaki T-SQL sorgusunu kullanın:
GRANT REFERENCES ON CREDENTIAL::[server-level_credential] TO [login_name];
Bir veritabanı kullanıcısına veritabanı kapsamlı kimlik bilgileri üzerinde REFERENCES yetki tanımlamak için, kullanıcı veritabanında aşağıdaki T-SQL sorgusunu kullanın.
GRANT REFERENCES ON DATABASE SCOPED CREDENTIAL::[database-scoped_credential] TO [user_name];
Sunucu düzeyinde kimlik bilgileri
Server-level credentials are used when a SQL login calls OPENROWSET function without a DATA_SOURCE to read files on a storage account.
Sunucu düzeyinde kimlik bilgilerinin adı, Azure depolamasının temel URL'siyle eşleşmeli ve isteğe bağlı olarak bir kapsayıcı adıyla devam etmelidir. CREATE CREDENTIAL çalıştırılarak bir kimlik bilgisi eklenir. You must provide the CREDENTIAL NAME argument.
Note
The FOR CRYPTOGRAPHIC PROVIDER argument is not supported.
Sunucu düzeyinde KIMLIK BILGISI adı şu biçimle eşleşmelidir: <prefix>://<storage_account_path>[/<container_name>]. Depolama hesabı yolları aşağıdaki tabloda açıklanmıştır:
| Dış Veri Kaynağı | Önek | Depolama hesabı yolu |
|---|---|---|
| Azure Blob Depolama | https |
<storage_account>.blob.core.windows.net |
| Azure Data Lake Storage Gen1 | https |
<storage_account>.azuredatalakestore.net/webhdfs/v1 |
| Azure Data Lake Storage Gen2 | https |
<storage_account>.dfs.core.windows.net |
Sunucu düzeyinde kimlik bilgileri daha sonra aşağıdaki kimlik doğrulama türlerini kullanarak Azure depolamaya erişebilir:
Microsoft Entra kullanıcıları, Depolama Blobu Veri Sahibi, Depolama Blob Verileri Katkıda Bulunanı veya Depolama Blob Veri Okuyucusu rolünün üyesi olmaları durumunda Azure depolamadaki herhangi bir dosyaya erişebilir. Microsoft Entra kullanıcılarının depolamaya erişmek için kimlik bilgilerine ihtiyacı yoktur.
SQL kimliği doğrulanmış kullanıcılar depolama alanına erişmek için Microsoft Entra kimlik doğrulamasını kullanamaz. They can access storage through a database credential using Managed Identity, SAS Key, Service Principal or if there is public access to the storage.
Database-scoped credential
Database-scoped credentials are used when any principal calls OPENROWSET function with DATA_SOURCE or selects data from external table that don't access public files. Veritabanı kapsamlı kimlik bilgilerinin depolama hesabının adıyla eşleşmesi gerekmez; depolama konumunu tanımlayan VERİ KAYNAĞI'nda referans alınır.
Veritabanı kapsamlı kimlik bilgileri aşağıdaki kimlik doğrulama türlerini kullanarak Azure depolamaya erişimi etkinleştirir:
Microsoft Entra kullanıcıları, Depolama Blob Veri Sahibi, Depolama Blob Verileri Katkıda Bulunanı veya Depolama Blob Veri Okuyucusu rollerinin üyesi olmaları durumunda Azure depolamadaki tüm dosyalara erişebilir. Microsoft Entra kullanıcılarının depolamaya erişmek için kimlik bilgilerine ihtiyacı yoktur.
CREATE EXTERNAL DATA SOURCE mysample
WITH ( LOCATION = 'https://<storage_account>.dfs.core.windows.net/<container>/<path>'
)
SQL kimliği doğrulanmış kullanıcılar depolama alanına erişmek için Microsoft Entra kimlik doğrulamasını kullanamaz. They can access storage through a database credential using Managed Identity, SAS Key, Service Principal or if there is public access to the storage.
Veritabanı kapsamlı kimlik bilgileri, dış veri kaynaklarında bu depolamaya erişmek için hangi kimlik doğrulama yönteminin kullanılacağını belirtmek için kullanılır:
CREATE EXTERNAL DATA SOURCE mysample
WITH ( LOCATION = 'https://<storage_account>.dfs.core.windows.net/<container>/<path>',
CREDENTIAL = <name of database scoped credential>
)
Örnekler
Genel kullanıma açık bir veri kaynağına erişme
Genel kullanıma açık veri kaynağına erişen bir tablo oluşturmak için aşağıdaki betiği kullanın.
CREATE EXTERNAL FILE FORMAT [SynapseParquetFormat]
WITH ( FORMAT_TYPE = PARQUET)
GO
CREATE EXTERNAL DATA SOURCE publicData
WITH ( LOCATION = 'https://<storage_account>.dfs.core.windows.net/<public_container>/<path>' )
GO
CREATE EXTERNAL TABLE dbo.userPublicData ( [id] int, [first_name] varchar(8000), [last_name] varchar(8000) )
WITH ( LOCATION = 'parquet/user-data/*.parquet',
DATA_SOURCE = [publicData],
FILE_FORMAT = [SynapseParquetFormat] )
Veritabanı kullanıcısı, dış tablo veya veri kaynağına başvuran OPENROWSET işlevini kullanarak veri kaynağındaki dosyaların içeriğini okuyabilir:
SELECT TOP 10 * FROM dbo.userPublicData;
GO
SELECT TOP 10 * FROM OPENROWSET(BULK 'parquet/user-data/*.parquet',
DATA_SOURCE = 'mysample',
FORMAT='PARQUET') as rows;
GO
Kimlik bilgilerini kullanarak veri kaynağına erişme
Modify the following script to create an external table that accesses Azure storage using SAS token, Microsoft Entra identity of user, or managed identity of workspace.
-- Create master key in databases with some password (one-off per database)
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>'
GO
-- Create databases scoped credential that use Managed Identity, SAS token or service principal. User needs to create only database-scoped credentials that should be used to access data source:
CREATE DATABASE SCOPED CREDENTIAL WorkspaceIdentity
WITH IDENTITY = 'Managed Identity'
GO
CREATE DATABASE SCOPED CREDENTIAL SasCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = 'sv=2019-10-1********ZVsTOL0ltEGhf54N8KhDCRfLRI%3D'
GO
CREATE DATABASE SCOPED CREDENTIAL SPNCredential WITH
IDENTITY = '**44e*****8f6-ag44-1890-34u4-22r23r771098@https://login.microsoftonline.com/**do99dd-87f3-33da-33gf-3d3rh133ee33/oauth2/token'
, SECRET = '.7OaaU_454azar9WWzLL.Ea9ePPZWzQee~'
GO
-- Create data source that one of the credentials above, external file format, and external tables that reference this data source and file format:
CREATE EXTERNAL FILE FORMAT [SynapseParquetFormat] WITH ( FORMAT_TYPE = PARQUET)
GO
CREATE EXTERNAL DATA SOURCE mysample
WITH ( LOCATION = 'https://<storage_account>.dfs.core.windows.net/<container>/<path>'
-- Uncomment one of these options depending on authentication method that you want to use to access data source:
--,CREDENTIAL = WorkspaceIdentity
--,CREDENTIAL = SasCredential
--,CREDENTIAL = SPNCredential
)
CREATE EXTERNAL TABLE dbo.userData ( [id] int, [first_name] varchar(8000), [last_name] varchar(8000) )
WITH ( LOCATION = 'parquet/user-data/*.parquet',
DATA_SOURCE = [mysample],
FILE_FORMAT = [SynapseParquetFormat] );
Veritabanı kullanıcısı, dış tablo veya veri kaynağına başvuran OPENROWSET işlevini kullanarak veri kaynağındaki dosyaların içeriğini okuyabilir:
SELECT TOP 10 * FROM dbo.userdata;
GO
SELECT TOP 10 * FROM OPENROWSET(BULK 'parquet/user-data/*.parquet', DATA_SOURCE = 'mysample', FORMAT='PARQUET') as rows;
GO
İlgili içerik
Bu makaleler farklı klasör türlerini, dosya türlerini sorgulamayı ve görünümleri oluşturma ve kullanma hakkında bilgi edinmenize yardımcı olur: