Aracılığıyla paylaş


Azure Synapse Analytics'te sunucusuz SQL havuzu için depolama hesabı erişimini denetleme

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 OPENROWSET izni 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ı

  1. Azure portalında Depolama Hesabınızı arayın.
  2. In the main navigation menu, go to Networking under Settings.
  3. Kaynak örnekleri bölümünde Azure Synapse çalışma alanınız için bir özel durum ekleyin.
  4. Microsoft.Synapse/workspaces bir Kaynak türü olarak seçin.
  5. Çalışma alanınızın adını Örnek adı olarak seçin.
  6. 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.

  1. PowerShell'i açın veya PowerShell'i yükleyin.

  2. 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 Version
    
  3. Azure Kiracınıza bağlanın:

    Connect-AzAccount
    
  4. PowerShell'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.

  5. Azure depolama hesabı ağ kuralı ekleyin:

        $parameters = @{
            ResourceGroupName = $resourceGroupName
            Name = $accountName
            TenantId = $tenantId 
            ResourceId = $resourceId
        }
    
        Add-AzStorageAccountNetworkRule @parameters
    
  6. Depolama 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 $resourceid gelen 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, OPENROWSET iş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 SOURCE with 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 CREDENTIAL ana 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 CONTROL veritabanı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

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: