Mengontrol akses akun penyimpanan untuk kumpulan SQL tanpa server di Azure Synapse Analytics

Kueri kumpulan SQL tanpa server membaca file langsung dari Azure Storage. Izin untuk mengakses file di penyimpanan Azure dikontrol pada dua tingkat:

  • Tingkat penyimpanan - Pengguna harus memiliki izin untuk mengakses file penyimpanan mendasar. Administrator penyimpanan Anda harus mengizinkan perwakilan Microsoft Entra membaca/menulis file, atau membuat kunci tanda tangan akses bersama (SAS) yang akan digunakan untuk mengakses penyimpanan.
  • Tingkat layanan SQL - Pengguna harus diizinkan untuk membaca data menggunakan tabel eksternal atau untuk menjalankan fungsi OPENROWSET. Baca lebih lanjut tentang izin yang diperlukan pada bagian ini.

Artikel ini menjelaskan jenis kredensial yang dapat Anda gunakan dan bagaimana pencarian kredensial diberlakukan untuk pengguna SQL dan Microsoft Entra.

Izin penyimpanan

Kumpulan SQL tanpa server di ruang kerja Synapse Analytics dapat membaca konten file yang disimpan di penyimpanan Azure Data Lake. Anda perlu mengonfigurasi izin pada penyimpanan untuk memungkinkan pengguna yang menjalankan kueri SQL untuk membaca file. Terdapat tiga metode untuk mengaktifkan akses ke file:

  • Kontrol akses berbasis peran (RBAC) memungkinkan Anda menetapkan peran ke beberapa pengguna Microsoft Entra di penyewa tempat penyimpanan Anda ditempatkan. Pembaca harus menjadi anggota Pembaca Data Blob Penyimpanan, Kontributor Data Blob Penyimpanan, atau peran Pemilik Data Blob Penyimpanan di akun penyimpanan. Pengguna yang menulis data di penyimpanan Azure harus menjadi anggota peran Kontributor Data Blob Penyimpanan atau Pemilik Data Blob Penyimpanan. Peran Pemilik Penyimpanan tidak menyiratkan bahwa pengguna juga merupakan Pemilik Data Penyimpanan.
  • Daftar Kontrol Akses (ACL) memungkinkan Anda menentukan izin Baca(R), Tulis(W), dan Eksekusi(X) secara rinci pada file dan direktori di penyimpanan Azure. ACL dapat ditetapkan ke pengguna Microsoft Entra. Jika pembaca ingin membaca file pada jalur di Azure Storage, pembaca harus memiliki ACL Eksekusi(X) pada setiap folder di jalur file, dan ACL Baca(R) pada file. Pelajari selengkapnya cara mengatur izin ACL di lapisan penyimpanan.
  • Tanda tangan akses bersama (SAS) memungkinkan pembaca untuk mengakses file di penyimpanan Azure Data Lake menggunakan token berbatas waktu. Pembaca bahkan tidak perlu diautentikasi sebagai pengguna Microsoft Entra. Token SAS berisi izin yang diberikan kepada pembaca serta periode ketika token valid. Token SAS adalah pilihan yang baik untuk akses yang dibatasi waktu ke pengguna mana pun yang bahkan tidak perlu berada di penyewa Microsoft Entra yang sama. Token SAS dapat ditentukan pada akun penyimpanan atau pada direktori tertentu. Pelajari lebih lanjut memberikan akses terbatas ke sumber daya Azure Storage menggunakan tanda tangan akses bersama.

Sebagai alternatif, Anda dapat membuat file Anda tersedia untuk umum dengan mengizinkan akses anonim. Pendekatan ini TIDAK boleh digunakan jika Anda memiliki data non-publik.

Jenis otorisasi penyimpanan yang didukung

Pengguna yang telah masuk ke kumpulan SQL tanpa server harus diizinkan untuk mengakses dan mengajukan kueri untuk file di Azure Storage jika file tidak tersedia untuk umum. Anda dapat menggunakan empat jenis otorisasi untuk mengakses penyimpanan non-publik: identitas pengguna, tanda tangan akses bersama, perwakilan layanan, dan identitas terkelola.

Catatan

Pass-through Microsoft Entra adalah perilaku default saat Anda membuat ruang kerja.

Identitas pengguna, juga dikenal sebagai "Microsoft Entra pass-through", adalah jenis otorisasi di mana identitas pengguna Microsoft Entra yang masuk ke kumpulan SQL tanpa server digunakan untuk mengotorisasi akses data. Sebelum mengakses data, administrator Azure Storage harus memberikan izin kepada pengguna Microsoft Entra. Seperti yang ditunjukkan dalam tabel Jenis otorisasi yang didukung untuk pengguna database, ini tidak didukung untuk jenis pengguna SQL.

Penting

Token autentikasi Microsoft Entra mungkin di-cache oleh aplikasi klien. Misalnya, Power BI menyimpan token Microsoft Entra dan menggunakan kembali token yang sama selama satu jam. Kueri yang berjalan lama mungkin gagal jika token kedaluwarsa di tengah eksekusi kueri. Jika Anda mengalami kegagalan kueri yang disebabkan oleh token akses Microsoft Entra yang kedaluwarsa di tengah kueri, pertimbangkan untuk beralih ke perwakilan layanan, identitas terkelola, atau tanda tangan akses bersama.

Anda harus menjadi anggota peran Pemilik Data Blob Penyimpanan, Kontributor Data Blob Penyimpanan, atau Pembaca Data Blob Penyimpanan untuk menggunakan identitas Anda untuk mengakses data. Sebagai alternatif, Anda dapat menentukan aturan ACL untuk mengakses file dan folder secara rinci. Bahkan jika Anda adalah Pemilik Akun Penyimpanan, Anda masih perlu menambahkan peran untuk diri Anda ke salah satu Data Blob Penyimpanan. Untuk mempelajari lebih lanjut mengenai kontrol akses di Azure Data Lake Store Gen2, tinjau artikel Kontrol akses di Azure Data Lake Storage Gen2.

Skenario lintas penyewa

Dalam kasus ketika Azure Storage berada di penyewa yang berbeda dari kolam SQL tanpa server Synapse, otorisasi melalui Perwakilan Layanan adalah metode yang disarankan. Otorisasi SAS juga dapat dilakukan, sementara Identitas Terkelola tidak didukung.

Tipe Otorisasi Penyimpanan yang dilindungi firewall penyimpanan yang dilindungi non-Firewall
SAS Didukung Didukung
Perwakilan Layanan Tidak Didukung Didukung

Catatan

Jika Azure Storage dilindungi oleh firewall Azure Storage, Perwakilan Layanan tidak akan didukung.

Jenis otorisasi yang didukung untuk pengguna database

Tabel berikut ini menyediakan jenis otorisasi Azure Storage yang tersedia untuk metode masuk yang berbeda ke dalam titik akhir SQL tanpa server Azure Synapse Analytics:

Tipe otorisasi Pengguna SQL Pengguna Microsoft Entra Prinsipal layanan
Identitas pengguna Tidak Didukung Didukung Didukung
SAS Didukung Didukung Didukung
Prinsipal layanan Didukung Didukung Didukung
Identitas Terkelola Didukung Didukung Didukung

Penyimpanan dan jenis otorisasi yang didukung

Anda dapat menggunakan kombinasi jenis otorisasi dan jenis Azure Storage berikut:

Tipe otorisasi Penyimpanan Blob ADLS Gen1 ADLS Gen2
SAS Didukung Tidak didukung Didukung
Prinsipal layanan Didukung Didukung Didukung
Identitas Terkelola Didukung Didukung Didukung
Identitas pengguna Didukung Didukung Didukung

Skenario lintas penyewa

Dalam kasus ketika Azure Storage berada di penyewa yang berbeda dari kumpulan SQL tanpa server Azure Synapse Analytics, otorisasi melalui perwakilan layanan adalah metode yang direkomendasikan. Otorisasi tanda tangan akses bersama juga dimungkinkan. Identitas layanan terkelola tidak didukung.

Tipe Otorisasi Penyimpanan yang dilindungi firewall penyimpanan yang dilindungi non-Firewall
SAS Didukung Didukung
Prinsipal layanan Tidak Didukung Didukung

Catatan

Jika Azure Storage dilindungi oleh firewall Azure Storage dan berada di penyewa lain, perwakilan layanan tidak akan didukung. Sebagai gantinya, gunakan tanda tangan akses bersama (SAS).

Penyimpanan yang dilindungi firewall

Anda dapat mengonfigurasi akun penyimpanan untuk mengizinkan akses ke kumpulan SQL tanpa server tertentu dengan membuat aturan instans sumber daya. Saat mengakses penyimpanan yang dilindungi dengan firewall, gunakan Identitas Pengguna atau Identitas Terkelola.

Catatan

Fitur firewall di Azure Storage berada dalam pratinjau publik dan tersedia di semua wilayah cloud publik.

Tabel berikut ini menyediakan jenis otorisasi Azure Storage yang dilindungi firewall yang tersedia untuk metode masuk yang berbeda ke dalam titik akhir SQL tanpa server Azure Synapse Analytics:

Tipe otorisasi Pengguna SQL Pengguna Microsoft Entra Prinsipal layanan
Identitas pengguna Tidak Didukung Didukung Didukung
SAS Tidak Didukung Tidak Didukung Tidak Didukung
Prinsipal layanan Tidak Didukung Tidak Didukung Tidak Didukung
Identitas Terkelola Didukung Didukung Didukung

Untuk mengakses penyimpanan yang dilindungi dengan firewall melalui identitas pengguna, Anda dapat menggunakan portal Azure atau modul Az.Storage PowerShell.

Konfigurasi firewall Azure Storage melalui portal Azure

  1. Cari Akun Penyimpanan Anda di portal Microsoft Azure.
  2. Di menu navigasi utama, buka Jaringan di bawah Pengaturan.
  3. Di bagian Instans sumber daya, tambahkan pengecualian untuk ruang kerja Azure Synapse Anda.
  4. Pilih Microsoft.Synapse/workspaces sebagai Jenis sumber daya.
  5. Pilih nama ruang kerja Anda sebagai Nama instans.
  6. Pilih Simpan.

Konfigurasi firewall Azure Storage melalui PowerShell

Ikuti langkah-langkah ini untuk mengonfigurasi akun penyimpanan Anda dan menambahkan pengecualian untuk ruang kerja Azure Synapse.

  1. Buka PowerShell atau instal PowerShell.

  2. Instal versi terbaru modul Az.Storage dan modul Az.Synapse, misalnya dalam skrip berikut:

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

    Penting

    Pastikan Anda menggunakan setidaknya versi 3.4.0. Anda dapat memeriksa versi Az.Storage Anda dengan menjalankan perintah ini:

    Get-Module -ListAvailable -Name Az.Storage | Select Version
    
  3. Sambungkan ke Penyewa Azure Anda:

    Connect-AzAccount
    
  4. Tentukan variabel di PowerShell:

    • Nama grup sumber daya - Anda dapat menemukan ini di portal Azure di Gambaran Umum akun penyimpanan Anda.
    • Nama Akun - nama akun penyimpanan yang dilindungi oleh aturan firewall.
    • ID Penyewa - Anda dapat menemukan ini di portal Azure di ID Microsoft Entra, di bawah Properti, di properti Penyewa.
    • Nama Ruang Kerja - Nama ruang kerja Azure Synapse.
        $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
    

    Penting

    Nilai yang $resourceid dikembalikan oleh skrip PowerShell harus cocok dengan templat ini: /subscriptions/{subscription-id}/resourcegroups/{resource-group}/providers/Microsoft.Synapse/workspaces/{name-of-workspace} Penting untuk menulis grup sumber daya dalam huruf kecil.

  5. Tambahkan aturan jaringan akun penyimpanan Azure:

        $parameters = @{
            ResourceGroupName = $resourceGroupName
            Name = $accountName
            TenantId = $tenantId 
            ResourceId = $resourceId
        }
    
        Add-AzStorageAccountNetworkRule @parameters
    
  6. Verifikasi bahwa aturan jaringan akun penyimpanan diterapkan di firewall akun penyimpanan Anda. Skrip PowerShell berikut membandingkan $resourceid variabel dari langkah-langkah sebelumnya dengan output aturan jaringan akun penyimpanan.

        $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
            }
        }
    

Kredensial

Untuk mengkueri file yang terletak di Azure Storage, titik akhir kumpulan SQL tanpa server Anda memerlukan kredensial yang berisi informasi autentikasi. Dua jenis info masuk yang digunakan yaitu:

  • Kredensial tingkat server digunakan untuk kueri ad-hoc yang dijalankan menggunakan OPENROWSET fungsi. Nama kredensial harus cocok dengan URL penyimpanan.
  • Kredensial cakupan database digunakan untuk tabel eksternal. Referensi tabel eksternal DATA SOURCE dengan info masuk yang harus digunakan untuk mengakses penyimpanan.

Memberikan izin untuk mengelola kredensial

Untuk memberikan kemampuan mengelola kredensial:

  • Untuk mengizinkan pengguna membuat atau menghilangkan kredensial tingkat server, administrator harus memberikan ALTER ANY CREDENTIAL izin untuk masuknya di database master. Contohnya:

    GRANT ALTER ANY CREDENTIAL TO [login_name];
    
  • Untuk mengizinkan pengguna membuat atau menghilangkan kredensial lingkup database, administrator harus memberikan CONTROL izin pada database kepada pengguna database di database pengguna. Contohnya:

    GRANT CONTROL ON DATABASE::[database_name] TO [user_name];
    

Memberikan izin untuk menggunakan info masuk

Pengguna database yang mengakses penyimpanan eksternal harus memiliki izin untuk menggunakan info masuk. Untuk menggunakan kredensial, pengguna harus memiliki REFERENCES izin pada kredensial tertentu.

Untuk memberikan REFERENCES izin pada kredensial tingkat server untuk login, gunakan kueri T-SQL berikut ini di database master:

GRANT REFERENCES ON CREDENTIAL::[server-level_credential] TO [login_name];

Untuk memberikan REFERENCES izin pada kredensial cakupan database untuk pengguna database, gunakan kueri T-SQL berikut dalam database pengguna:

GRANT REFERENCES ON DATABASE SCOPED CREDENTIAL::[database-scoped_credential] TO [user_name];

Kredensial tingkat server

Kredensial tingkat server digunakan saat login SQL memanggil OPENROWSET fungsi tanpa DATA_SOURCE membaca file di akun penyimpanan.

Nama kredensial tingkat server harus cocok dengan URL dasar penyimpanan Azure, secara opsional diikuti dengan nama kontainer. Info masuk ditambahkan dengan menjalankan BUAT INFO MASUK. Anda harus memberikan CREDENTIAL NAME argumen.

Catatan

Argumen FOR CRYPTOGRAPHIC PROVIDER tidak didukung.

Nama KREDENSIAL tingkat server harus cocok dengan format berikut: <prefix>://<storage_account_path>[/<container_name>]. Jalur akun penyimpanan dijelaskan dalam tabel berikut ini:

Sumber Data Eksternal Awalan Jalur akun penyimpanan
Azure Blob Storage 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

Kredensial tingkat server kemudian dapat mengakses penyimpanan Azure menggunakan jenis autentikasi berikut:

Pengguna Microsoft Entra dapat mengakses file apa pun di penyimpanan Azure jika mereka adalah anggota peran Pemilik Data Blob Penyimpanan, Kontributor Data Blob Penyimpanan, atau Pembaca Data Blob Penyimpanan. Pengguna Microsoft Entra tidak memerlukan kredensial untuk mengakses penyimpanan.

Pengguna terautentikasi SQL tidak dapat menggunakan autentikasi Microsoft Entra untuk mengakses penyimpanan. Mereka dapat mengakses penyimpanan melalui kredensial database menggunakan Identitas Terkelola, Kunci SAS, Perwakilan Layanan atau jika ada akses publik ke penyimpanan.

Info masuk cakupan database

Info masuk cakupan database digunakan saat prinsip mana pun memanggil fungsi OPENROWSET dengan DATA_SOURCE atau memilih data dari tabel eksternal yang tidak mengakses file publik. Kredensial lingkup database tidak perlu cocok dengan nama akun penyimpanan, itu direferensikan dalam SUMBER DATA yang menentukan lokasi penyimpanan.

Info masuk cakupan database memungkinkan akses ke penyimpanan Azure menggunakan jenis autentikasi berikut:

Pengguna Microsoft Entra dapat mengakses file apa pun di penyimpanan Azure jika mereka adalah anggota peran Pemilik Data Blob Penyimpanan, Kontributor Data Blob Penyimpanan, atau Pembaca Data Blob Penyimpanan. Pengguna Microsoft Entra tidak memerlukan kredensial untuk mengakses penyimpanan.

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

Pengguna terautentikasi SQL tidak dapat menggunakan autentikasi Microsoft Entra untuk mengakses penyimpanan. Mereka dapat mengakses penyimpanan melalui kredensial database menggunakan Identitas Terkelola, Kunci SAS, Perwakilan Layanan atau jika ada akses publik ke penyimpanan.

Info masuk cakupan database digunakan dalam sumber data eksternal untuk menentukan metode autentikasi yang akan digunakan untuk mengakses penyimpanan ini:

CREATE EXTERNAL DATA SOURCE mysample
WITH (    LOCATION   = 'https://<storage_account>.dfs.core.windows.net/<container>/<path>',
          CREDENTIAL = <name of database scoped credential> 
)

Contoh

Mengakses sumber data yang tersedia untuk umum

Gunakan skrip berikut ini untuk membuat tabel yang mengakses sumber data yang tersedia untuk umum.

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

Pengguna database dapat membaca konten file dari sumber data menggunakan tabel eksternal atau fungsi OPENROWSET yang mereferensikan sumber data:

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

Mengakses sumber data menggunakan info masuk

Ubah skrip berikut untuk membuat tabel eksternal yang mengakses penyimpanan Azure menggunakan token SAS, identitas pengguna Microsoft Entra, atau identitas ruang kerja terkelola.

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

Pengguna database dapat membaca konten file dari sumber data menggunakan tabel eksternal atau fungsi OPENROWSET yang mereferensikan sumber data:

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

Langkah berikutnya

Artikel ini membantu Anda mempelajari cara mengkueri berbagai jenis folder, jenis file, dan membuat dan menggunakan tampilan: