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

sunucusuz SQL havuz sorgusu, dosyaları doğrudan Azure Depolama okur. Azure Storage 'daki dosyalara erişim izinleri iki düzeyde denetlenir:

  • Depolama düzeyi -kullanıcı, temel depolama dosyalarına erişim iznine sahip olmalıdır. Depolama yöneticiniz, Azure AD Principal 'ın dosyaları okumasına/yazmasına veya depolamaya erişmek için kullanılacak SAS anahtarı oluşturmasına izin verir.
  • SQL hizmet düzeyi -kullanıcının dış tablo kullanarak verileri okuma izni vermiş olması veya işlevi yürütmesi gerekir OPENROWSET . Bu bölümde gerekli izinlerhakkında daha fazla bilgi edinin.

bu makalede, kullanabileceğiniz kimlik bilgileri türleri ve kimlik bilgileri aramasının SQL ve Azure AD kullanıcıları için nasıl kullanılacağı 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. dosyaları okumak üzere bir SQL sorgusu yürüten bir kullanıcının etkinleştirilmesi için, depolamada izinleri 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ın yerleştirildiği kiracıda BIR Azure AD kullanıcısına bir rol atamanızı sağlar. Bir okuyucunun Storage Blob Data Reader Storage Blob Data Contributor depolama hesabında, veya RBAC rolüne sahip olması gerekir Storage Blob Data Owner . Azure Storage 'da veri yazan bir kullanıcının Storage Blob Data Writer veya Storage Blob Data Owner rolü olmalıdır. Storage OwnerRolün bir kullanıcının de olduğunu göstermez Storage Data Owner .
  • Access Control listeleri (ACL) , Azure depolama 'daki dosya ve dizinlerde hassas okuma (R), yazma (W) ve yürütme (X) izinleri tanımlamanızı sağlar. ACL, Azure AD kullanıcılarına atanabilir. okuyucular Azure Depolama 'teki bir dosyadaki dosyayı okumak istiyorlarsa, dosya yolundaki her klasör üzerinde Execute (X) acl 'si olmalıdır ve dosyadaki (R) acl 'yi okur. Depolama KATMANıNDA ACL izinleri ayarlama hakkında daha fazla bilgi edinin.
  • Paylaşılan erişim imzası (SAS) , bir okuyucunun zaman sınırlı belirteci kullanarak Azure Data Lake depolama üzerindeki dosyalara erişmesine olanak sağlar. Okuyucunun kimlik doğrulamasının Azure AD kullanıcısı olarak da olması gerekmez. SAS belirteci, okuyucuya verilen izinleri ve belirtecin geçerli olduğu süreyi içerir. SAS belirteci, aynı Azure AD kiracısında olması gerekmeyen tüm kullanıcılara zaman kısıtlı erişim için iyi bir seçimdir. 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 vermehakkında daha fazla bilgi edinin.

Alternatif olarak, anonim erişime izin vererek dosyalarınızın genel kullanıma açık olmasını sağlayabilirsiniz. Bu yaklaşım, genel olmayan veriniz varsa kullanılmamalıdır.

Desteklenen depolama yetkilendirme türleri

dosyalar herkese açık değilse, sunucusuz SQL havuzunda oturum açan bir kullanıcının Azure Depolama dosyalara erişme ve bunları sorgulama yetkisi olması gerekir. Genel olmayan depolama- Kullanıcı kimliği, paylaşılan erişim Imzası, hizmet sorumlusu ve yönetilen kimlikerişimi için dört yetkilendirme türü kullanabilirsiniz.

Not

Azure AD geçiş , bir çalışma alanı oluşturduğunuzda varsayılan davranıştır.

"Azure ad geçişi" olarak da bilinen kullanıcı kimliği, veri erişimine yetki vermek için sunucusuz SQL havuzunda oturum açan Azure AD kullanıcısının kimliğinin kullanıldığı bir yetkilendirme türüdür. verilere erişmeden önce azure Depolama yöneticisi azure AD kullanıcısına izin vermelidir. aşağıdaki tabloda gösterildiği gibi, SQL kullanıcı türü için desteklenmez.

Önemli

AAD kimlik doğrulama belirteci, istemci uygulamaları tarafından önbelleğe alınmış olabilir. Örneğin, PowerBI tarafından AAD belirteci önbelleğe alınır ve aynı belirteci bir saat için yeniden kullanır. Sorgu yürütmenin ortasında belirtecin süresi dolarsa uzun süre çalışan sorgular başarısız olabilir. Sorgunun ortasında süresi dolan AAD erişim belirtecinin neden olduğu sorgu hatalarıyla karşılaşıyorsanız, hizmet sorumlusu, yönetilen kimlik veya paylaşılan erişim imzasınageçmeyi göz önünde bulundurun.

verilerinize erişmek için kimliğinizi kullanabilmeniz için bir Depolama Blob veri sahibi/katkıda bulunan/okuyucu rolüne sahip olmanız gerekir. Alternatif olarak, dosyalara ve klasörlere erişmek için hassas ACL kuralları belirtebilirsiniz. Depolama bir hesabının sahibi olsanız bile, kendinizi Depolama Blob veri rollerinden birine eklemeniz gerekir. Azure Data Lake Store Gen2 ' de erişim denetimi hakkında daha fazla bilgi edinmek için Azure Data Lake Storage 2. makalesinde erişim denetimini gözden geçirin.

Çapraz kiracı senaryoları

Azure Depolama, Synapse sunucusuz SQL havuzundan farklı bir kiracıdaysa, hizmet sorumlusu aracılığıyla yetkilendirme önerilen yöntemdir. SAS yetkilendirmesi de mümkün olsa da, yönetilen kimlik desteklenmez.

Veritabanları kullanıcıları için desteklenen yetkilendirme türleri

aşağıdaki tabloda, farklı oturum açma yöntemleri için kullanılabilir yetkilendirme türlerini Synapse sunucusuz SQL uç noktasına bulabilirsiniz:

Yetki türü SQL kullanıcısı Azure AD kullanıcısı Hizmet Sorumlusu
Kullanıcı kimliği Desteklenmiyor Desteklenir Desteklenir
SAS Desteklenir Desteklenir Desteklenir
Hizmet Sorumlusu Desteklenir Desteklenir Desteklenir
Yönetilen Kimlik Desteklenir Desteklenir Desteklenir

Desteklenen depolama alanları ve yetkilendirme türleri

aşağıdaki yetkilendirme ve Azure Depolama türlerini kullanabilirsiniz:

Yetki türü Blob Depolama ADLS 1. Nesil ADLS 2. Nesil
SAS Desteklenir Desteklenmiyor Desteklenir
Hizmet Sorumlusu Desteklenir Desteklenir Desteklenir
Yönetilen Kimlik Desteklenir Desteklenir Desteklenir
Kullanıcı kimliği Desteklenir Desteklenir Desteklenir

Güvenlik Duvarı korumalı depolama

depolama hesaplarını, bir kaynak örneği kuralıoluşturarak belirli bir sunucusuz SQL havuzuna erişime izin verecek şekilde yapılandırabilirsiniz. Güvenlik duvarıyla korunan depolamaya erişirken Kullanıcı kimliğini veya yönetilen kimlik' i kullanabilirsiniz.

Not

Depolama güvenlik duvarı özelliği genel önizlemede ve tüm genel bulut bölgelerinde kullanılabilir.

aşağıdaki tabloda, farklı oturum açma yöntemleri için kullanılabilir yetkilendirme türlerini Synapse sunucusuz SQL uç noktasına bulabilirsiniz:

Yetki türü SQL kullanıcısı Azure AD kullanıcısı Hizmet Sorumlusu
Kullanıcı kimliği Desteklenmiyor Desteklenir Desteklenir
SAS Desteklenmiyor Desteklenmiyor Desteklenmiyor
Hizmet Sorumlusu Desteklenmiyor Desteklenmiyor Desteklenmiyor
Yönetilen Kimlik Desteklenir Desteklenir Desteklenir

kullanıcı kimliği aracılığıyla güvenlik duvarıyla korunan depolamaya erişmek için, Az önce Azure portal kullanıcı arabirimi veya PowerShell modülünü kullanabilirsiniz. Depolama.

Azure portal aracılığıyla yapılandırma

  1. Azure portal Depolama hesabınızı arayın.
  2. bölüm Ayarlar altındaki ağ ' a gidin.
  3. "Kaynak örnekleri" bölümünde, SYNAPSE çalışma alanınız için bir özel durum ekleyin.
  4. Kaynak türü olarak Microsoft. SYNAPSE/çalışma alanlarını seçin.
  5. Örnek adı olarak çalışma alanınızın adını seçin.
  6. Kaydet’e tıklayın.

PowerShell aracılığıyla yapılandırma

Depolama hesabı güvenlik duvarını yapılandırmak ve SYNAPSE çalışma alanı için bir özel durum eklemek için aşağıdaki adımları izleyin.

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

  2. az. Depolama 3.4.0 modülünü ve az. Synapse 0.7.0 'yi yükler:

    Install-Module -Name Az.Storage -RequiredVersion 3.4.0
    Install-Module -Name Az.Synapse -RequiredVersion 0.7.0
    

    Önemli

    3.4.0 sürümünü kullandığınızdan emin olun. şu komutu çalıştırarak Az. Depolama sürümünüzü kontrol edebilirsiniz:

    Get-Module -ListAvailable -Name  Az.Storage | select Version
    
  3. Azure kiracınıza Bağlan:

    Connect-AzAccount
    
  4. PowerShell 'de değişkenleri tanımlama:

    • kaynak grubu adı-bu Azure portal, Depolama hesabına genel bakış halinde bulabilirsiniz.
    • Hesap adı-güvenlik duvarı kuralları tarafından korunan depolama hesabının adı.
    • kiracı kimliği-bunu, kiracı bilgilerinde Azure Active Directory Azure portal bulabilirsiniz.
    • Çalışma alanı adı-SYNAPSE çalışma alanının adı.
        $resourceGroupName = "<resource group name>"
        $accountName = "<storage account name>"
        $tenantId = "<tenant id>"
        $workspaceName = "<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

    Kaynak kimliğinin RESOURCEID değişkeninin yazdırılması içinde bu şablonla eşleştiğinden emin olun.

    Daha küçük bir durumda ResourceGroups yazmak önemlidir. Bir kaynak kimliği örneği:

    /subscriptions/{subscription-id}/resourcegroups/{resource-group}/providers/Microsoft.Synapse/workspaces/{name-of-workspace}
    
  5. Depolama ağ kuralı ekle:

        Add-AzStorageAccountNetworkRule -ResourceGroupName $resourceGroupName -Name $accountName -TenantId $tenantId -ResourceId $resourceId
    
  6. Kuralın depolama hesabınıza uygulandığını doğrulayın:

        $rule = Get-AzStorageAccountNetworkRuleSet -ResourceGroupName $resourceGroupName -Name $accountName
        $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 'de bulunan bir dosyayı sorgulamak için sunucusuz SQL havuz uç noktanağınızın kimlik doğrulama bilgilerini içeren bir kimlik bilgisi olması gerekir. İki tür kimlik bilgisi kullanılır:

  • Sunucu düzeyindeki KIMLIK BILGILERI, işlev kullanılarak yürütülen geçici sorgular için kullanılır OPENROWSET . Kimlik bilgisi adının depolama URL 'siyle eşleşmesi gerekir.
  • VERITABANı KAPSAMLı KIMLIK BILGILERI dış tablolar için kullanılır. Dış tablo DATA SOURCE , depolamaya erişmek için kullanılması gereken kimlik bilgileri ile başvurur.

Bir kullanıcının kimlik bilgisini oluşturmasına veya çalıştırmasına izin vermek için yönetici, bir kullanıcıya HERHANGI bir KIMLIK BILGISI izni VEREBILIR/REDDEDEBILIR:

GRANT ALTER ANY CREDENTIAL TO [user_name];

Dış depolamaya erişen veritabanı kullanıcılarının kimlik bilgilerini kullanma izni olmalıdır.

Kimlik bilgilerini kullanmak için izinleri verme

Kimlik bilgisini kullanmak için, bir kullanıcının REFERENCES belirli bir kimlik bilgisi üzerinde izni olması gerekir. Bir REFERENCES specific_user için storage_credential izin vermek için şunu yürütün:

GRANT REFERENCES ON CREDENTIAL::[storage_credential] TO [specific_user];

Sunucu kapsamlı kimlik bilgisi

sunucu kapsamlı kimlik bilgileri, SQL oturum açma çağrısı OPENROWSET olmadan, DATA_SOURCE bazı depolama hesabındaki dosyaları okumaya gerek olmadığında kullanılır. Sunucu kapsamlı kimlik bilgisinin adı, Azure depolama 'nın temel URL 'siyle eşleşmelidir ( isteğe bağlı olarak bir kapsayıcı adı gelir). Kimlik bilgisi Oluşturçalıştırılarak bir kimlik bilgisi eklenir. KIMLIK BILGISI adı bağımsız değişkeni sağlamanız gerekir.

Not

FOR CRYPTOGRAPHIC PROVIDERBağımsız değişken desteklenmiyor.

Sunucu düzeyi KIMLIK BILGISI adı, depolama hesabının (ve isteğe bağlı olarak kapsayıcı) tam yoluyla aşağıdaki biçimde olmalıdır: <prefix>://<storage_account_path>[/<container_name>] . Depolama hesabı yolları aşağıdaki tabloda açıklanmıştır:

Dış veri kaynağı Ön ek 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 kapsamlı kimlik bilgileri, aşağıdaki kimlik doğrulama türlerini kullanarak Azure depolama 'ya erişim sağlar:

Azure AD kullanıcıları Storage Blob Data Owner , veya rolüne sahip olmaları durumunda Azure Storage 'daki herhangi bir dosyaya erişebilir Storage Blob Data Contributor Storage Blob Data Reader . Azure AD kullanıcılarının depolama erişimi için kimlik bilgilerine ihtiyacı yoktur.

SQL kullanıcıları depolama alanına erişmek için Azure AD kimlik doğrulamasını kullanamaz.

Veritabanı kapsamlı kimlik bilgileri

Veritabanı kapsamlı kimlik bilgileri, herhangi bir asıl çağrı çalıştırıldığında OPENROWSET DATA_SOURCE veya ortak dosyalara erişlemeyen dış tablodaki verileri seçtiğinde kullanılır. Veritabanı kapsamlı kimlik bilgisinin depolama hesabı adıyla eşleşmesi gerekmez. Bu, depolama konumunu tanımlayan VERI KAYNAĞıNDA açıkça kullanılacaktır.

Veritabanı kapsamlı kimlik bilgileri, aşağıdaki kimlik doğrulama türlerini kullanarak Azure depolama 'ya erişim sağlar:

Azure AD kullanıcıları, en az Storage Blob Data Owner , veya rolüne sahip olmaları durumunda Azure Storage 'daki herhangi bir dosyaya erişebilir Storage Blob Data Contributor Storage Blob Data Reader . Azure AD kullanıcılarının depolama erişimi için kimlik bilgilerine ihtiyacı yoktur.

CREATE EXTERNAL DATA SOURCE mysample
WITH (    LOCATION   = 'https://<storage_account>.dfs.core.windows.net/<container>/<path>'
)

SQL kullanıcıları depolama alanına erişmek için Azure AD kimlik doğrulamasını kullanamaz.

Bu depolama alanına erişmek için hangi kimlik doğrulama yönteminin kullanılacağını belirtmek için, dış veri kaynaklarında veritabanı kapsamlı kimlik bilgileri 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 olarak kullanılabilir 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ı, veri kaynağına başvuran dış tablo veya 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 bir veri kaynağına erişme

SAS belirtecini, Kullanıcı Azure AD kimliğini veya çalışma alanının yönetilen kimliğini kullanarak Azure depolama 'ya erişen bir dış tablo oluşturmak için aşağıdaki betiği değiştirin.

-- Create master key in databases with some password (one-off per database)
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Y*********0'
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ı, veri kaynağına başvuran dış tablo veya 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

Sonraki adımlar

Aşağıda listelenen 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: