Přístup k externímu úložišti pomocí bezserverového fondu SQL v Azure Synapse Analytics

Tento článek popisuje, jak můžou uživatelé číst data ze souborů uložených ve službě Azure Storage v bezserverovém fondu SQL. Uživatelé mají pro přístup k úložišti následující možnosti:

  • Funkce OPENROWSET , která umožňuje ad hoc dotazy na soubory ve službě Azure Storage.
  • Externí tabulka , která je předdefinovaná datová struktura založená na sadě externích souborů.

Uživatel může používat různé metody ověřování, jako je ověřování Microsoft Entra passthrough (výchozí pro objekty zabezpečení Microsoft Entra) a ověřování SAS (výchozí pro objekty zabezpečení SQL).

Dotazování souborů pomocí OPENROWSET

OPENROWSET umožňuje uživatelům dotazovat se na externí soubory v úložišti Azure, pokud mají přístup k úložišti. Uživatel, který je připojený k bezserverovém fondu SQL, by měl ke čtení obsahu souborů v úložišti Azure použít následující dotaz:

SELECT * FROM
 OPENROWSET(BULK 'https://<storage_account>.dfs.core.windows.net/<container>/<path>/*.parquet', format= 'parquet') as rows

Uživatel má přístup k úložišti pomocí následujících pravidel přístupu:

  • Uživatel Microsoft Entra – OPENROWSET použije identitu volajícího Microsoft Entra pro přístup ke službě Azure Storage nebo přístupu k úložišti s anonymním přístupem.
  • Uživatel SQL – OPENROWSET bude mít přístup k úložišti s anonymním přístupem nebo může být zosobněný pomocí tokenu SAS nebo spravované identity pracovního prostoru.

Objekty zabezpečení SQL můžou také použít OPENROWSET k přímému dotazování souborů chráněných pomocí tokenů SAS nebo spravované identity pracovního prostoru. Pokud uživatel SQL tuto funkci spustí, musí power uživatel s ALTER ANY CREDENTIAL oprávněním vytvořit přihlašovací údaje s oborem serveru, které odpovídají adrese URL ve funkci (pomocí názvu úložiště a kontejneru) a udělit odkazy pro tyto přihlašovací údaje volající funkci OPENROWSET:

EXECUTE AS somepoweruser

CREATE CREDENTIAL [https://<storage_account>.dfs.core.windows.net/<container>]
 WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = 'sas token';

GRANT REFERENCES ON CREDENTIAL::[https://<storage_account>.dfs.core.windows.net/<container>] TO sqluser

Pokud přihlašovací údaje na úrovni serveru, které odpovídají adrese URL, nebo uživatel SQL nemá oprávnění k odkazům na tyto přihlašovací údaje, vrátí se chyba. Objekty zabezpečení SQL nemůžou zosobnit pomocí některé identity Microsoft Entra.

Poznámka:

Tato verze OPENROWSET je navržená pro rychlé a snadné zkoumání dat pomocí výchozího ověřování. Pokud chcete využít zosobnění nebo spravovanou identitu, použijte OPENROWSET s DATA_SOURCE popsanými v další části.

Dotazování na zdroje dat pomocí funkce OPENROWSET

OPENROWSET umožňuje uživateli dotazovat se na soubory umístěné v některém externím zdroji dat:

SELECT * FROM
 OPENROWSET(BULK 'file/path/*.parquet',
 DATA_SOURCE = MyAzureInvoices,
 FORMAT= 'parquet') as rows

Uživatel, který spustí tento dotaz, musí mít přístup k souborům. Uživatelé musí být zosobněni pomocí tokenu SAS nebo spravované identity pracovního prostoru , pokud nemají přímý přístup k souborům pomocí identity Microsoft Entra nebo anonymního přístupu.

DATABASE SCOPED CREDENTIAL určuje, jak získat přístup k souborům v odkazovaném zdroji dat (aktuálně SAS a spravovaná identita). Power user with CONTROL DATABASE permission would need to create DATABASE SCOPED CREDENTIAL that will be used to access storage and EXTERNAL DATA SOURCE that specifies URL of data source and credential that be used:

EXECUTE AS somepoweruser;

-- Create MASTER KEY if it doesn't exists in database
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'some very strong password';

CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
 WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
 SECRET = '******srt=sco&amp;sp=rwac&amp;se=2017-02-01T00:55:34Z&amp;st=201********' ;

CREATE EXTERNAL DATA SOURCE MyAzureInvoices
 WITH ( LOCATION = 'https://<storage_account>.dfs.core.windows.net/<container>/<path>/' ,
 CREDENTIAL = AccessAzureInvoices) ;

Volající musí mít k provedení funkce OPENROWSET jednu z následujících oprávnění:

  • Jedno z oprávnění ke spuštění OPENROWSET:
    • ADMINISTER BULK OPERATIONS povoluje přihlášení spouštět funkci OPENROWSET.
    • ADMINISTER DATABASE BULK OPERATIONS povoluje uživateli s oborem databáze spouštět funkci OPENROWSET.
  • REFERENCES DATABASE SCOPED CREDENTIAL přihlašovacích údajů, na které se odkazuje v EXTERNAL DATA SOURCEsouboru .

EXTERNÍ TABULKA

Uživatel s oprávněními ke čtení tabulky má přístup k externím souborům pomocí externí tabulky vytvořené nad sadou složek a souborů Azure Storage.

Uživatel s oprávněními k vytvoření externí tabulky (například CREATE TABLE a ALTER ANY CREDENTIAL nebo REFERENCES DATABASE SCOPED CREDENTIAL) může pomocí následujícího skriptu vytvořit tabulku nad zdrojem dat Azure Storage:

CREATE EXTERNAL TABLE [dbo].[DimProductexternal]
( ProductKey int, ProductLabel nvarchar, ProductName nvarchar )
WITH
(
LOCATION='/DimProduct/year=*/month=*' ,
DATA_SOURCE = AzureDataLakeStore ,
FILE_FORMAT = TextFileFormat
) ;

Uživatel, který čte data z této tabulky, musí mít přístup k souborům. Uživatelé musí být zosobnění pomocí tokenu SAS nebo spravované identity pracovního prostoru , pokud nemají přímý přístup k souborům pomocí identity Microsoft Entra nebo anonymního přístupu.

DATABASE SCOPED CREDENTIAL určuje, jak získat přístup k souborům v odkazovaném zdroji dat. Uživatel s oprávněním CONTROL DATABASE by potřeboval vytvořit PŘIHLAŠOVACÍ ÚDAJE S OBOREM DATABÁZE, které se použijí pro přístup k úložišti a externímu zdroji dat, který určuje adresu URL zdroje dat a přihlašovacích údajů, které by se měly použít:

EXECUTE AS somepoweruser;

-- Create MASTER KEY if it doesn't exists in database
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'some very strong password';

CREATE DATABASE SCOPED CREDENTIAL cred
 WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
 SECRET = '******srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=201********' ;

CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
 WITH ( LOCATION = 'https://<storage_account>.dfs.core.windows.net/<container>/<path>' ,
 CREDENTIAL = cred
 ) ;

Čtení externích souborů pomocí EXTERNÍ TABULKY

EXTERNÍ TABULKA umožňuje číst data ze souborů odkazovaných prostřednictvím zdroje dat pomocí standardního příkazu SQL SELECT:

SELECT *
FROM dbo.DimProductsExternal

Volající musí mít následující oprávnění ke čtení dat:

  • SELECT Externí tabulka oprávnění ON
  • REFERENCES DATABASE SCOPED CREDENTIAL oprávnění, pokud DATA SOURCECREDENTIAL

Oprávnění

Následující tabulka uvádí požadovaná oprávnění pro výše uvedené operace.

Dotaz Požadována oprávnění
OPENROWSET(BULK) bez zdroje dat ADMINISTER BULK OPERATIONS, ADMINISTER DATABASE BULK OPERATIONSnebo přihlášení SQL musí obsahovat ODKAZY CREDENTIAL::<URL> pro úložiště chráněné SAS.
OPENROWSET(BULK) se zdroji dat bez přihlašovacích údajů ADMINISTER BULK OPERATIONS nebo ADMINISTER DATABASE BULK OPERATIONS,
OPENROWSET(BULK) se zdroji dat s přihlašovacími údaji REFERENCES DATABASE SCOPED CREDENTIAL a jednu z ADMINISTER BULK OPERATIONS nebo ADMINISTER DATABASE BULK OPERATIONS
VYTVOŘENÍ EXTERNÍHO ZDROJE DAT ALTER ANY EXTERNAL DATA SOURCE a REFERENCES DATABASE SCOPED CREDENTIAL
VYTVOŘENÍ EXTERNÍ TABULKY CREATE TABLE, ALTER ANY SCHEMA, ALTER ANY EXTERNAL FILE FORMATa ALTER ANY EXTERNAL DATA SOURCE
VÝBĚR Z EXTERNÍ TABULKY SELECT TABLE a REFERENCES DATABASE SCOPED CREDENTIAL
CETAS Vytvoření tabulky - CREATE TABLE, ALTER ANY SCHEMA, ALTER ANY DATA SOURCEa ALTER ANY EXTERNAL FILE FORMAT. Čtení dat: ADMINISTER BULK OPERATIONS nebo REFERENCES CREDENTIALSELECT TABLE pro každou tabulku, zobrazení nebo funkci v dotazu + R/W oprávnění k úložišti

Další kroky

Teď jste připraveni pokračovat v následujících článcích s postupy: