Toegang tot opslagaccounts beheren voor serverloze SQL-pools in Azure Synapse Analytics

Bij een query van een serverloze SQL-pool worden bestanden rechtstreeks gelezen uit Azure Storage. Machtigingen voor toegang tot de bestanden in Azure Storage worden op twee niveaus bepaald:

  • Opslagniveau: de gebruiker moet toegang hebben tot onderliggende opslagbestanden. Uw opslagbeheerder moet Microsoft Entra-principal toestaan om bestanden te lezen/schrijven of sas-sleutel (Shared Access Signature) te genereren die wordt gebruikt voor toegang tot opslag.
  • SQL-serviceniveau: de gebruiker moet toestemming hebben gegeven om gegevens te lezen met behulp van een externe tabel of het uitvoeren van de functie OPENROWSET. U vindt meer informatie over de vereiste machtigingen in deze sectie.

In dit artikel worden de typen referenties beschreven die u kunt gebruiken en hoe referentiezoekacties worden uitgevoerd voor SQL- en Microsoft Entra-gebruikers.

Machtigingen voor opslag

Een serverloze SQL-pool in de Synapse Analytics-werkruimte kan de inhoud lezen van bestanden die zijn opgeslagen in Azure Data Lake Storage. U moet machtigingen voor opslag configureren om een gebruiker die een SQL-query uitvoert om de bestanden te kunnen lezen. Er zijn drie methoden voor het inschakelen van de toegang tot de bestanden:

  • Met op rollen gebaseerd toegangsbeheer (RBAC) kunt u een rol toewijzen aan een bepaalde Microsoft Entra-gebruiker in de tenant waar uw opslag wordt geplaatst. Een lezer moet lid zijn van de rol Opslagblobgegevenslezer, Inzender voor opslagblobgegevens of Eigenaar van opslagblobgegevens in het opslagaccount. Een gebruiker die gegevens schrijft in Azure Storage, moet lid zijn van de rol Inzender voor opslagblobgegevens of eigenaar van opslagblobgegevens. De rol Opslageigenaar impliceert niet dat een gebruiker ook eigenaar van opslaggegevens is.
  • Met toegangsbeheerlijsten (ACL) kunt u een fijnmazige leesmachtiging (R), Write(W) en Execute(X) definiëren voor de bestanden en mappen in Azure Storage. ACL kan worden toegewezen aan Microsoft Entra-gebruikers. Als lezers een bestand willen lezen in een pad in Azure Storage, moeten ze de machtiging voor ACL uitvoeren (X) hebben voor elke map in het bestandspad en voor ACL lezen (R) voor het bestand. Meer informatie over het instellen van ACL-machtigingen in de opslaglaag.
  • Met Shared Access Signature (SAS) kan een lezer toegang krijgen tot de bestanden in de Azure Data Lake-opslag met behulp van het tijdsgebonden token. De lezer hoeft niet eens te worden geverifieerd als Microsoft Entra-gebruiker. Het SAS-token bevat de machtigingen die aan de lezer zijn verleend, evenals de periode gedurende welke het token geldig is. SAS-token is een goede keuze voor tijdgebonden toegang tot elke gebruiker die zich niet eens in dezelfde Microsoft Entra-tenant hoeft te bevinden. Een SAS-token kan worden gedefinieerd voor het opslagaccount of voor specifieke mappen. Lees meer over beperkte toegang verlenen tot Azure Storage-resources door middel van Shared Acces Signatures.

U kunt uw bestanden ook openbaar beschikbaar maken door anonieme toegang toe te staan. Deze methode moet NIET worden gebruikt als u niet-openbare gegevens hebt.

Ondersteunde autorisatietypen voor opslag

Een gebruiker die zich heeft aangemeld bij een serverloze SQL-pool, moet zijn gemachtigd om query's uit te voeren op de bestanden in Azure Storage als de bestanden niet openbaar beschikbaar zijn. U kunt vier autorisatietypen gebruiken voor toegang tot niet-openbare opslag: gebruikersidentiteit, shared access signature, service-principal en beheerde identiteit.

Notitie

Microsoft Entra passthrough is het standaardgedrag wanneer u een werkruimte maakt.

Gebruikersidentiteit, ook wel 'Microsoft Entra pass-through' genoemd, is een autorisatietype waarbij de identiteit van de Microsoft Entra-gebruiker die is aangemeld bij een serverloze SQL-pool wordt gebruikt om toegang tot gegevens te autoriseren. Voordat de gegevens worden geopend, moet de Azure Storage-beheerder machtigingen verlenen aan de Microsoft Entra-gebruiker. Zoals aangegeven in de tabel Ondersteunde autorisatie voor databasegebruikers, wordt deze niet ondersteund voor het SQL-gebruikerstype.

Belangrijk

Een Microsoft Entra-verificatietoken kan in de cache worden opgeslagen door de clienttoepassingen. Power BI slaat bijvoorbeeld Microsoft Entra-tokens in de cache op en gebruikt hetzelfde token gedurende een uur opnieuw. Langlopende query's kunnen mislukken als het token in het midden van de queryuitvoering verloopt. Als u queryfouten ondervindt die worden veroorzaakt door het Microsoft Entra-toegangstoken dat in het midden van de query verloopt, kunt u overwegen over te schakelen naar een service-principal, beheerde identiteit of handtekening voor gedeelde toegang.

U moet lid zijn van de rol Eigenaar van opslagblobgegevens, Inzender voor opslagblobgegevens of Lezer voor opslagblobgegevens om uw identiteit te kunnen gebruiken voor toegang tot de gegevens. Als alternatief kunt u fijnmazige ACL-regels opgeven voor toegang tot bestanden en mappen. Zelfs als u eigenaar bent van een opslagaccount, moet u nog beschikken over een van deze rollen voor Storage-blobgegevens. Raadpleeg het artikel Toegangsbeheer in Azure Data Lake Storage Gen2 voor meer informatie over toegangsbeheer in Azure Data Lake Store Gen2.

Scenario's voor meerdere tenants

In gevallen waarin Azure Storage zich in een andere tenant bevindt dan de serverloze SQL-pool van Synapse, is autorisatie via service-principal de aanbevolen methode. SAS-autorisatie is ook mogelijk, terwijl Managed Identity niet wordt ondersteund.

Autorisatietype Met firewall beveiligde opslag niet-firewall beveiligde opslag
SAS Ondersteund Ondersteund
Service-principal Niet ondersteund Ondersteund

Notitie

Als Azure Storage wordt beveiligd door een Azure Storage-firewall, wordt service-principal niet ondersteund.

Ondersteunde autorisatietypen voor databasegebruikers

De volgende tabel bevat beschikbare Azure Storage-autorisatietypen voor verschillende aanmeldingsmethoden in een serverloos SQL-eindpunt van Azure Synapse Analytics:

Autorisatietype SQL-gebruiker Microsoft Entra-gebruiker Service/principal
Gebruikersidentiteit Niet ondersteund Ondersteund Ondersteund
SAS Ondersteund Ondersteund Ondersteund
Service/principal Ondersteund Ondersteund Ondersteund
Beheerde identiteit Ondersteund Ondersteund Ondersteund

Ondersteunde opslag- en autorisatietypen

U kunt de volgende combinaties van autorisatietypen en Azure Storage-typen gebruiken:

Autorisatietype Blob Storage ADLS Gen1 ADLS Gen2
SAS Ondersteund Niet ondersteund Ondersteund
Service/principal Ondersteund Ondersteund Ondersteund
Beheerde identiteit Ondersteund Ondersteund Ondersteund
Gebruikersidentiteit Ondersteund Ondersteund Ondersteund

Scenario's voor meerdere tenants

In gevallen waarin Azure Storage zich in een andere tenant bevindt dan de serverloze SQL-pool van Azure Synapse Analytics, is autorisatie via de service-principal de aanbevolen methode. Autorisatie van handtekeningen voor gedeelde toegang is ook mogelijk. Beheerde service-identiteit wordt niet ondersteund.

Autorisatietype Met firewall beveiligde opslag niet-firewall beveiligde opslag
SAS Ondersteund Ondersteund
Service/principal Niet ondersteund Ondersteund

Notitie

Als Azure Storage wordt beveiligd door een Azure Storage-firewall en zich in een andere tenant bevindt, wordt de service-principal niet ondersteund. Gebruik in plaats daarvan een Shared Access Signature (SAS).

Met firewall beveiligde opslag

U kunt opslagaccounts configureren om toegang tot een specifieke serverloze SQL-pool toe te staan door een regel voor een resource-exemplaar te maken. Wanneer u toegang krijgt tot opslag die is beveiligd met de firewall, gebruikt u Gebruikersidentiteit of Beheerde identiteit.

Notitie

De firewallfunctie in Azure Storage bevindt zich in openbare preview en is beschikbaar in alle openbare cloudregio's.

De volgende tabel bevat beschikbare met firewall beveiligde Azure Storage-autorisatietypen voor verschillende aanmeldingsmethoden in een serverloos SQL-eindpunt van Azure Synapse Analytics:

Autorisatietype SQL-gebruiker Microsoft Entra-gebruiker Service/principal
Gebruikersidentiteit Niet ondersteund Ondersteund Ondersteund
SAS Niet ondersteund Niet ondersteund Niet ondersteund
Service/principal Niet ondersteund Niet ondersteund Niet ondersteund
Beheerde identiteit Ondersteund Ondersteund Ondersteund

Voor toegang tot opslag die is beveiligd met de firewall via een gebruikersidentiteit, kunt u de Azure-portal of de Az.Storage PowerShell-module gebruiken.

Azure Storage-firewallconfiguratie via Azure Portal

  1. Zoek uw opslagaccount in Azure Portal.
  2. Ga in het hoofdnavigatiemenu naar Netwerken onder Instellingen.
  3. Voeg in de sectie Resource-exemplaren een uitzondering toe voor uw Azure Synapse-werkruimte.
  4. Selecteer Microsoft.Synapse/workspaces dit als een resourcetype.
  5. Selecteer de naam van uw werkruimte als exemplaarnaam.
  6. Selecteer Opslaan.

Azure Storage-firewallconfiguratie via PowerShell

Volg deze stappen om uw opslagaccount te configureren en een uitzondering toe te voegen voor de Azure Synapse-werkruimte.

  1. Open PowerShell of installeer PowerShell.

  2. Installeer de nieuwste versies van de Az.Storage-module en de Az.Synapse-module, bijvoorbeeld in het volgende script:

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

    Belangrijk

    Zorg ervoor dat u ten minste versie 3.4.0 gebruikt. U kunt uw Az.Storage-versie controleren door deze opdracht uit te voeren:

    Get-Module -ListAvailable -Name Az.Storage | Select Version
    
  3. Verbinding maken met de Azure-tenant:

    Connect-AzAccount
    
  4. Variabelen definiëren in PowerShell:

    • Naam van resourcegroep: u vindt deze in Azure Portal in het overzicht van uw opslagaccount.
    • Accountnaam: de naam van het opslagaccount dat wordt beveiligd door firewallregels.
    • Tenant-id: u vindt deze in Azure Portal in Microsoft Entra-id, onder Eigenschappen, in tenanteigenschappen.
    • Werkruimtenaam: naam van de Azure Synapse-werkruimte.
        $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
    

    Belangrijk

    De waarde van het $resourceid geretourneerde PowerShell-script moet overeenkomen met deze sjabloon: /subscriptions/{subscription-id}/resourcegroups/{resource-group}/providers/Microsoft.Synapse/workspaces/{name-of-workspace}Het is belangrijk om resourcegroepen in kleine letters te schrijven.

  5. Een netwerkregel voor een Azure-opslagaccount toevoegen:

        $parameters = @{
            ResourceGroupName = $resourceGroupName
            Name = $accountName
            TenantId = $tenantId 
            ResourceId = $resourceId
        }
    
        Add-AzStorageAccountNetworkRule @parameters
    
  6. Controleer of de netwerkregel voor het opslagaccount is toegepast in de firewall van uw opslagaccount. Met het volgende PowerShell-script wordt de $resourceid variabele uit de vorige stappen vergeleken met de uitvoer van de netwerkregel voor het opslagaccount.

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

Referenties

Als u een query wilt uitvoeren op een bestand in Azure Storage, heeft uw serverloze SQL-pooleindpunt een referentie nodig die de verificatiegegevens bevat. Er worden twee typen referenties gebruikt:

  • Referentie op serverniveau wordt gebruikt voor ad-hocquery's die worden uitgevoerd met behulp van OPENROWSET de functie. De referentienaam moet overeenkomen met de opslag-URL.
  • Er wordt een referentie met databasebereik gebruikt voor externe tabellen. De externe tabel verwijst naar DATA SOURCE met de referentie die moet worden gebruikt voor toegang tot de opslag.

Machtigingen verlenen om referenties te beheren

De mogelijkheid om referenties te beheren:

  • Als een gebruiker een referentie op serverniveau kan maken of verwijderen, moet een beheerder de machtiging verlenen voor de ALTER ANY CREDENTIAL aanmelding in de hoofddatabase. Bijvoorbeeld:

    GRANT ALTER ANY CREDENTIAL TO [login_name];
    
  • Een beheerder moet de CONTROL machtiging voor de database verlenen aan de databasegebruiker in de gebruikersdatabase om een databasereferentie te maken of neer te zetten. Bijvoorbeeld:

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

Machtigingen verlenen voor het gebruik van referenties

Databasegebruikers die toegang hebben tot externe opslag, moeten toestemming hebben om referenties te gebruiken. Als u de referentie wilt gebruiken, moet een gebruiker over de REFERENCES machtiging voor een specifieke referentie beschikken.

Als u de REFERENCES machtiging wilt verlenen voor een referentie op serverniveau voor een aanmelding, gebruikt u de volgende T-SQL-query in de hoofddatabase:

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

Als u een REFERENCES machtiging wilt verlenen voor een databasereferentie voor een databasegebruiker, gebruikt u de volgende T-SQL-query in de gebruikersdatabase:

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

Referentie op serverniveau

Referenties op serverniveau worden gebruikt wanneer een SQL-aanmeldingsfunctie wordt aangeroepen OPENROWSET zonder bestanden DATA_SOURCE in een opslagaccount te lezen.

De naam van de referentie op serverniveau moet overeenkomen met de basis-URL van Azure Storage, eventueel gevolgd door een containernaam. U kunt een referentie toevoegen door CREATE CREDENTIAL uit te voeren. U moet het CREDENTIAL NAME argument opgeven.

Notitie

Het argument FOR CRYPTOGRAPHIC PROVIDER wordt niet ondersteund.

Referentienaam op serverniveau moet overeenkomen met de volgende indeling: <prefix>://<storage_account_path>[/<container_name>]. Paden naar opslagaccounts worden beschreven in de volgende tabel:

Externe gegevensbron Voorvoegsel Pad van opslagaccount
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

Referenties op serverniveau hebben vervolgens toegang tot Azure Storage met behulp van de volgende verificatietypen:

Microsoft Entra-gebruikers hebben toegang tot elk bestand in Azure Storage als ze lid zijn van de rol Eigenaar van opslagblobgegevens, Inzender voor opslagblobgegevens of Opslagblobgegevenslezer. Microsoft Entra-gebruikers hebben geen referenties nodig voor toegang tot opslag.

Geverifieerde SQL-gebruikers kunnen microsoft Entra-verificatie niet gebruiken voor toegang tot opslag. Ze hebben toegang tot opslag via een databasereferentie met beheerde identiteit, SAS-sleutel, service-principal of als er openbare toegang tot de opslag is.

Referenties in databasebereik

Referenties in databasebereik worden gebruikt wanneer een principal de functie OPENROWSET aanroept met DATA_SOURCE of gegevens selecteert uit een externe tabel die geen toegang heeft tot openbare bestanden. De referentie voor het databasebereik hoeft niet overeen te komen met de naam van het opslagaccount. Er wordt verwezen in DE GEGEVENSBRON die de locatie van de opslag definieert.

Met de referenties binnen databasebereik wordt toegang tot Azure-opslag verleend met behulp van de volgende verificatietypen:

Microsoft Entra-gebruikers hebben toegang tot elk bestand in Azure Storage als ze lid zijn van de rollen Eigenaar van opslagblobgegevens, Inzender voor opslagblobgegevens of Opslagblobgegevenslezer. Microsoft Entra-gebruikers hebben geen referenties nodig voor toegang tot opslag.

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

Geverifieerde SQL-gebruikers kunnen microsoft Entra-verificatie niet gebruiken voor toegang tot opslag. Ze hebben toegang tot opslag via een databasereferentie met beheerde identiteit, SAS-sleutel, service-principal of als er openbare toegang tot de opslag is.

Referenties in het databasebereik worden gebruikt in externe gegevensbronnen om op te geven welke verificatiemethode er wordt gebruikt voor toegang tot deze opslag:

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

Voorbeelden

Toegang tot een openbaar beschikbare gegevensbron

Gebruik het volgende script om een tabel te maken die toegang heeft tot een openbaar beschikbare gegevensbron.

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

Een databasegebruiker kan de inhoud van de bestanden uit de gegevensbron lezen met behulp van de externe tabel of de functie OPENROWSET die verwijst naar de gegevensbron:

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

Toegang tot een gegevensbron met behulp van referenties

Wijzig het volgende script om een externe tabel te maken die toegang heeft tot Azure Storage met behulp van een SAS-token, Microsoft Entra-identiteit van de gebruiker of de beheerde identiteit van de werkruimte.

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

Een databasegebruiker kan de inhoud van de bestanden uit de gegevensbron lezen met behulp van externe tabel of de functie OPENROWSET die verwijst naar de gegevensbron:

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

Volgende stappen

Deze artikelen helpen u te leren hoe u verschillende maptypen, bestandstypen opvraagt en weergaven maakt en gebruikt: