Řízení přístupu k účtu úložiště pro bezserverový fond SQL ve službě Azure Synapse Analytics

Dotaz na bezserverový fond SQL čte soubory přímo ze služby Azure Storage. Oprávnění pro přístup k souborům v úložišti Azure se řídí na dvou úrovních:

  • Úroveň úložiště – Uživatel by měl mít oprávnění pro přístup k podkladovým souborům úložiště. Správce úložiště by měl povolit instančnímu objektu Microsoft Entra čtení a zápis souborů nebo vygenerovat klíč sdíleného přístupového podpisu (SAS), který se použije pro přístup k úložišti.
  • Úroveň služby SQL – Uživatel by měl udělit oprávnění ke čtení dat pomocí externí tabulky nebo ke spuštění OPENROWSET funkce. Další informace o požadovaných oprávněních najdete v této části.

Tento článek popisuje typy přihlašovacích údajů, které můžete použít a jak se provádí vyhledávání přihlašovacích údajů pro uživatele SQL a Microsoft Entra.

Oprávnění k úložišti

Bezserverový fond SQL v pracovním prostoru Synapse Analytics může číst obsah souborů uložených ve službě Azure Data Lake Storage. Musíte nakonfigurovat oprávnění k úložišti, aby uživatel, který spouští dotaz SQL, mohl číst soubory. Existují tři metody pro povolení přístupu k souborům:

  • Řízení přístupu na základě role (RBAC) umožňuje přiřadit roli některému uživateli Microsoft Entra v tenantovi, kde je vaše úložiště umístěné. Čtenář musí být členem role Čtenář dat objektů blob služby Storage, Přispěvatel dat objektů blob služby Storage nebo Vlastník dat objektů blob úložiště v účtu úložiště. Uživatel, který zapisuje data do úložiště Azure, musí být členem role Přispěvatel dat objektů blob služby Storage nebo Vlastník dat objektů blob služby Storage. Role Vlastník úložiště neznamená, že uživatel je také vlastníkem dat úložiště.
  • Seznamy řízení přístupu (ACL) umožňují definovat jemně odstupňovaná oprávnění Read(R), Write(W) a Execute(X) pro soubory a adresáře v úložišti Azure. ACL je možné přiřadit uživatelům Microsoft Entra. Pokud čtenáři chtějí číst soubor na cestě ve službě Azure Storage, musí mít oprávnění ACL Execute(X) u každé složky na cestě k tomuto souboru a oprávnění ACL Read(R) v tomto souboru. Získejte další informace o nastavení oprávnění ACL ve vrstvě úložiště.
  • Sdílený přístupový podpis (SAS) umožňuje čtenáři přistupovat k souborům ve službě Azure Data Lake Storage pomocí časově omezeného tokenu. Čtenář nemusí být ani ověřený jako uživatel Microsoft Entra. Token SAS obsahuje oprávnění udělená čtenáři a také dobu, po kterou je token platný. Token SAS je dobrou volbou pro přístup k jakémukoli uživateli s časovým omezením, který nemusí být ani ve stejném tenantovi Microsoft Entra. Token SAS lze definovat v účtu úložiště nebo v konkrétních adresářích. Přečtěte si další informace o udělení omezeného přístupu k prostředkům Azure Storage pomocí sdílených přístupových podpisů.

Jako alternativu můžete soubory nastavit jako veřejně přístupné tím, že povolíte anonymní přístup. Tento přístup by se NEMĚL používat, pokud máte neveřejná data.

Podporované typy autorizace úložiště

Uživatel, který se přihlásil do bezserverového fondu SQL, musí mít oprávnění k přístupu k souborům a dotazování na soubory ve službě Azure Storage, pokud nejsou veřejně dostupné. Pro přístup k neveřejné úložišti můžete použít čtyři typy autorizace: identita uživatele, sdílený přístupový podpis, instanční objekt a spravovaná identita.

Poznámka:

Průchod Microsoft Entra je výchozím chováním při vytváření pracovního prostoru.

Identita uživatele, označovaná také jako průchod Microsoft Entra, je typ autorizace, kde se identita uživatele Microsoft Entra přihlášeného do bezserverového fondu SQL používá k autorizaci přístupu k datům. Před přístupem k datům musí správce služby Azure Storage udělit oprávnění uživateli Microsoft Entra. Jak je uvedeno v podporovaných typech autorizace pro tabulku uživatelé databáze, nepodporuje se pro typ uživatele SQL.

Důležité

Ověřovací token Microsoft Entra může klientské aplikace ukládat do mezipaměti. Power BI například ukládá tokeny Microsoft Entra do mezipaměti a znovu používá stejný token po dobu jedné hodiny. Dlouhotrvající dotazy můžou selhat, pokud vyprší platnost tokenu uprostřed provádění dotazu. Pokud dochází k selháním dotazů způsobeným přístupovým tokenem Microsoft Entra, jehož platnost vyprší uprostřed dotazu, zvažte přepnutí na instanční objekt, spravovanou identitu nebo sdílený přístupový podpis.

Abyste mohli přistupovat k datům, musíte být členem role Vlastník dat objektů blob služby Storage, Přispěvatel dat objektů blob služby Storage nebo Čtenář dat objektů blob služby Storage. Jako alternativu můžete zadat jemně odstupňovaná pravidla seznamu ACL pro přístup k souborům a složkám. I když jste vlastníkem účtu úložiště, musíte se stále přidat do jedné z rolí dat objektů blob služby Storage. Další informace o řízení přístupu v Azure Data Lake Store Gen2 najdete v článku o řízení přístupu v Azure Data Lake Storage Gen2 .

Scénáře napříč tenanty

V případech, kdy je Azure Storage v jiném tenantovi než bezserverový fond SQL Synapse, se doporučuje autorizace prostřednictvím instančního objektu . Autorizace SAS je také možná, i když se spravovaná identita nepodporuje.

Typ ověřování Úložiště chráněné bránou firewall nechráněná brána firewall – úložiště
SAS Podporováno Podporováno
Instanční objekt Nepodporuje se Podporováno

Poznámka:

Pokud je Služba Azure Storage chráněná bránou firewall služby Azure Storage, instanční objekt se nebude podporovat.

Podporované typy autorizace pro uživatele databází

Následující tabulka obsahuje dostupné typy autorizace Azure Storage pro různé metody přihlašování do bezserverového koncového bodu SQL služby Azure Synapse Analytics:

Typ autorizace Uživatel SQL Uživatel Microsoft Entra Instanční objekt
Identita uživatele Nepodporuje se Podporováno Podporováno
SAS Podporováno Podporováno Podporováno
Instanční objekt Podporováno Podporováno Podporováno
Spravovaná identita Podporováno Podporováno Podporováno

Podporovaná úložiště a typy autorizace

Můžete použít následující kombinace typů autorizace a typů Azure Storage:

Typ autorizace Blob Storage ADLS Gen1 ADLS Gen2
SAS Podporováno Nepodporováno Podporováno
Instanční objekt Podporováno Podporováno Podporováno
Spravovaná identita Podporováno Podporováno Podporováno
Identita uživatele Podporováno Podporováno Podporováno

Scénáře napříč tenanty

V případech, kdy je Azure Storage v jiném tenantovi než bezserverový fond SQL služby Azure Synapse Analytics, se doporučuje autorizace prostřednictvím instančního objektu . Autorizace sdíleného přístupového podpisu je také možná. Identita spravované služby se nepodporuje.

Typ ověřování Úložiště chráněné bránou firewall nechráněná brána firewall – úložiště
SAS Podporováno Podporováno
Instanční objekt Nepodporuje se Podporováno

Poznámka:

Pokud je Služba Azure Storage chráněná bránou firewall služby Azure Storage a nachází se v jiném tenantovi, instanční objekt se nepodporuje. Místo toho použijte sdílený přístupový podpis (SAS).

Úložiště chráněné bránou firewall

Účty úložiště můžete nakonfigurovat tak, aby umožňovaly přístup ke konkrétnímu bezserverovém fondu SQL vytvořením pravidla instance prostředku. Při přístupu k úložišti chráněnému bránou firewall použijte identitu uživatele nebo spravovanou identitu.

Poznámka:

Funkce brány firewall ve službě Azure Storage je ve verzi Public Preview a je dostupná ve všech oblastech veřejného cloudu.

Následující tabulka obsahuje dostupné typy autorizace Azure Storage chráněné bránou firewall pro různé metody přihlašování do bezserverového koncového bodu SQL služby Azure Synapse Analytics:

Typ autorizace Uživatel SQL Uživatel Microsoft Entra Instanční objekt
Identita uživatele Nepodporuje se Podporováno Podporováno
SAS Nepodporuje se Nepodporuje se Nepodporuje se
Instanční objekt Nepodporuje se Nepodporuje se Nepodporuje se
Spravovaná identita Podporováno Podporováno Podporováno

Pokud chcete získat přístup k úložišti chráněnému bránou firewall prostřednictvím identity uživatele, můžete použít Azure Portal nebo modul Az.Storage PowerShell.

Konfigurace brány firewall služby Azure Storage prostřednictvím webu Azure Portal

  1. Vyhledejte svůj účet úložiště na webu Azure Portal.
  2. V hlavní navigační nabídce přejděte do části Sítě v části Nastavení.
  3. V části Instance prostředků přidejte výjimku pro váš pracovní prostor Azure Synapse.
  4. Vyberte Microsoft.Synapse/workspaces jako typ prostředku.
  5. Vyberte název pracovního prostoru jako název instance.
  6. Zvolte Uložit.

Konfigurace brány firewall služby Azure Storage prostřednictvím PowerShellu

Podle těchto kroků nakonfigurujte účet úložiště a přidejte výjimku pro pracovní prostor Azure Synapse.

  1. Otevřete PowerShell nebo nainstalujte PowerShell.

  2. Nainstalujte nejnovější verze modulu Az.Storage a modulu Az.Synapse, například v následujícím skriptu:

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

    Důležité

    Ujistěte se, že používáte aspoň verzi 3.4.0. Verzi Az.Storage můžete zkontrolovat spuštěním tohoto příkazu:

    Get-Module -ListAvailable -Name Az.Storage | Select Version
    
  3. Připojení do tenanta Azure:

    Connect-AzAccount
    
  4. Definování proměnných v PowerShellu:

    • Název skupiny prostředků – najdete ho na webu Azure Portal v přehledu účtu úložiště.
    • Název účtu – název účtu, který je chráněný pravidly brány firewall.
    • ID tenanta – toto najdete na webu Azure Portal v ID Microsoft Entra v části Vlastnosti ve vlastnostech tenanta.
    • Název pracovního prostoru – název pracovního prostoru 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
    

    Důležité

    Hodnota $resourceid vrácená skriptem PowerShellu by měla odpovídat této šabloně: /subscriptions/{subscription-id}/resourcegroups/{resource-group}/providers/Microsoft.Synapse/workspaces/{name-of-workspace} V malých případech je důležité psát skupiny prostředků.

  5. Přidejte síťové pravidlo účtu úložiště Azure:

        $parameters = @{
            ResourceGroupName = $resourceGroupName
            Name = $accountName
            TenantId = $tenantId 
            ResourceId = $resourceId
        }
    
        Add-AzStorageAccountNetworkRule @parameters
    
  6. Ověřte, že se v bráně firewall účtu úložiště použilo pravidlo sítě účtu úložiště. Následující skript PowerShellu $resourceid porovná proměnnou z předchozích kroků s výstupem síťového pravidla účtu úložiště.

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

Přihlašovací údaje

K dotazování na soubor umístěný ve službě Azure Storage potřebuje koncový bod bezserverového fondu SQL přihlašovací údaje, které obsahují ověřovací informace. Používají se dva typy přihlašovacích údajů:

  • Přihlašovací údaje na úrovni serveru se používají pro ad hoc dotazy spuštěné pomocí OPENROWSET funkce. Název přihlašovacích údajů se musí shodovat s adresou URL úložiště.
  • Přihlašovací údaje v oboru databáze se používají pro externí tabulky. Odkazy DATA SOURCE na externí tabulku s přihlašovacími údaji, které by se měly použít pro přístup k úložišti.

Udělení oprávnění ke správě přihlašovacích údajů

Udělení možnosti správy přihlašovacích údajů:

  • Aby mohl uživatel vytvořit nebo odstranit přihlašovací údaje na úrovni serveru, musí správce udělit ALTER ANY CREDENTIAL oprávnění k jeho přihlášení v hlavní databázi. Příklad:

    GRANT ALTER ANY CREDENTIAL TO [login_name];
    
  • Aby mohl uživatel vytvořit nebo odstranit přihlašovací údaje s vymezeným oborem databáze, musí správce udělit CONTROL oprávnění k databázi uživateli databáze v uživatelské databázi. Příklad:

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

Udělení oprávnění k používání přihlašovacích údajů

Uživatelé databáze, kteří přistupují k externímu úložišti, musí mít oprávnění k používání přihlašovacích údajů. Aby mohl uživatel používat přihlašovací údaje, musí mít REFERENCES oprávnění ke konkrétním přihlašovacím údajům.

Pokud chcete udělit REFERENCES oprávnění k přihlášení na úrovni serveru, použijte v hlavní databázi následující dotaz T-SQL:

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

Pokud chcete udělit REFERENCES oprávnění k přihlašovacím údajům v oboru databáze pro uživatele databáze, použijte v uživatelské databázi následující dotaz T-SQL:

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

Přihlašovací údaje na úrovni serveru

Přihlašovací údaje na úrovni serveru se používají, když funkce volání OPENROWSET přihlášení SQL bez DATA_SOURCE čtení souborů v účtu úložiště.

Název přihlašovacích údajů na úrovni serveru se musí shodovat se základní adresou URL úložiště Azure, případně za názvem kontejneru. Přihlašovací údaje se přidají spuštěním příkazu CREATE CREDENTIAL. Argument musíte zadat CREDENTIAL NAME .

Poznámka:

Argument FOR CRYPTOGRAPHIC PROVIDER není podporován.

Název CREDENTIAL na úrovni serveru musí odpovídat následujícímu formátu: <prefix>://<storage_account_path>[/<container_name>]. Cesty k účtu úložiště jsou popsané v následující tabulce:

Externí zdroj dat Předpona Cesta k účtu úložiště
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

Přihlašovací údaje na úrovni serveru pak mají přístup k úložišti Azure pomocí následujících typů ověřování:

Uživatelé Microsoft Entra mají přístup k libovolnému souboru v úložišti Azure, pokud jsou členy role Vlastník dat objektů blob služby Storage, Přispěvatel dat objektů blob úložiště nebo Čtenář dat objektů blob služby Storage. Uživatelé Microsoft Entra nepotřebují pro přístup k úložišti přihlašovací údaje.

Ověření uživatelé SQL nemůžou pro přístup k úložišti používat ověřování Microsoft Entra. K úložišti mají přístup prostřednictvím přihlašovacích údajů databáze pomocí spravované identity, klíče SAS, instančního objektu nebo veřejného přístupu k úložišti.

Přihlašovací údaje v oboru databáze

Přihlašovací údaje v oboru databáze se používají, když jakákoli funkce volání OPENROWSET objektu zabezpečení s DATA_SOURCE externí tabulkou nebo vybere data z externí tabulky , která nemají přístup k veřejným souborům. Přihlašovací údaje v oboru databáze se nemusí shodovat s názvem účtu úložiště. Odkazuje se na něj ve ZDROJI DAT, který definuje umístění úložiště.

Přihlašovací údaje v oboru databáze umožňují přístup k úložišti Azure pomocí následujících typů ověřování:

Uživatelé Microsoft Entra mají přístup k libovolnému souboru v úložišti Azure, pokud jsou členy role Vlastník dat objektů blob služby Storage, Přispěvatel dat objektů blob úložiště nebo Čtenář dat objektů blob služby Storage. Uživatelé Microsoft Entra nepotřebují pro přístup k úložišti přihlašovací údaje.

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

Ověření uživatelé SQL nemůžou pro přístup k úložišti používat ověřování Microsoft Entra. K úložišti mají přístup prostřednictvím přihlašovacích údajů databáze pomocí spravované identity, klíče SAS, instančního objektu nebo veřejného přístupu k úložišti.

Přihlašovací údaje s vymezeným oborem databáze se používají v externích zdrojích dat k určení metody ověřování, která se použije pro přístup k tomuto úložišti:

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

Příklady

Přístup k veřejně dostupnému zdroji dat

Pomocí následujícího skriptu vytvořte tabulku, která přistupuje k veřejně dostupnému zdroji dat.

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

Uživatel databáze může číst obsah souborů ze zdroje dat pomocí externí tabulky nebo funkce OPENROWSET , která odkazuje na zdroj dat:

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

Přístup ke zdroji dat pomocí přihlašovacích údajů

Upravte následující skript a vytvořte externí tabulku, která přistupuje k úložišti Azure pomocí tokenu SAS, identity Microsoft Entra uživatele nebo spravované identity pracovního prostoru.

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

Uživatel databáze může číst obsah souborů ze zdroje dat pomocí externí tabulky nebo funkce OPENROWSET , která odkazuje na zdroj dat:

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

Další kroky

Tyto články vám pomůžou zjistit, jak se dotazovat na různé typy složek, typy souborů a vytvářet a používat zobrazení: