Поделиться через


Доступ к внешнему хранилищу с помощью бессерверного пула SQL в Azure Synapse Analytics

В этой статье описывается, как пользователи могут считывать данные из файлов, хранящихся в службе хранилища Azure, в бессерверном пуле SQL. У пользователей есть следующие варианты доступа к хранилищу:

  • Функция OPENROWSET, которая включает нерегламентированные запросы по файлам в службе хранилища Azure.
  • Внешняя таблица , которая представляет собой предопределенную структуру данных, созданную на основе набора внешних файлов.

Пользователь может использовать различные методы проверки подлинности, такие как сквозная проверка подлинности Microsoft Entra (по умолчанию для субъектов Microsoft Entra) и аутентификация SAS (по умолчанию для субъектов SQL).

Запрос файлов с помощью OPENROWSET

OPENROWSET позволяет пользователям запрашивать внешние файлы в хранилище Azure, если у них есть доступ к хранилищу. Пользователь, подключенный к бессерверному пулу SQL, должен использовать следующий запрос для чтения содержимого файлов в хранилище Azure:

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

Пользователь может получить доступ к хранилищу с помощью следующих правил доступа:

  • Пользователь Microsoft Entra — OPENROWSET будет использовать удостоверение вызывающего пользователя Microsoft Entra для доступа к службе хранилища Azure или доступа к хранилищу с анонимным доступом.
  • Пользователь SQL — OPENROWSET получит доступ к хранилищу с анонимным доступом или может быть олицетворен с помощью маркера SAS или управляемого удостоверения рабочей области.

Субъекты SQL также могут использовать OPENROWSET для прямого запроса файлов, защищенных маркерами SAS или управляемым удостоверением рабочей области. Если пользователь SQL выполняет эту функцию, пользователь power user с разрешением должен создать учетные данные на ALTER ANY CREDENTIAL уровне сервера, соответствующие URL-адресу функции (используя имя хранилища и контейнер) и предоставленные разрешения REFERENCES для этих учетных данных вызывающему функции 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

Если учетные данные на уровне сервера не соответствуют URL-адресу или у пользователя SQL нет разрешений на ссылки для этих учетных данных, будет возвращена ошибка. Субъекты SQL не могут олицетворить с помощью некоторых удостоверений Microsoft Entra.

Примечание.

Эта версия OPENROWSET предназначена для быстрого и простого изучения данных с помощью проверки подлинности по умолчанию. Чтобы использовать олицетворение или управляемое удостоверение, используйте OPENROWSET с DATA_SOURCE, как описано в следующем разделе.

Запрос источников данных с помощью OPENROWSET

OPENROWSET позволяет пользователю запрашивать файлы, помещенные в некоторый внешний источник данных:

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

Пользователь, выполняющий этот запрос, должен иметь доступ к файлам. Пользователи должны быть олицетворены с помощью маркера SAS или управляемого удостоверения рабочей области , если они не могут напрямую получить доступ к файлам с помощью удостоверения Microsoft Entra или анонимного доступа.

DATABASE SCOPED CREDENTIAL указывает, как получить доступ к файлам в указанном источнике данных (в настоящее время SAS и Managed Identity). Опытному пользователю с CONTROL DATABASE разрешением потребуется создать DATABASE SCOPED CREDENTIAL, который будет использоваться для доступа к хранилищу, и EXTERNAL DATA SOURCE, что указывает URL-адрес источника данных и учетные данные, которые следует использовать:

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

Вызывающий объект должен иметь одно из следующих разрешений для выполнения функции OPENROWSET:

  • Одно из разрешений для выполнения OPENROWSET:
    • ADMINISTER BULK OPERATIONS позволяет выполнить вход для выполнения функции OPENROWSET.
    • ADMINISTER DATABASE BULK OPERATIONS позволяет пользователю в пределах базы данных выполнить функцию OPENROWSET.
  • REFERENCES DATABASE SCOPED CREDENTIAL учетные данные, на которые ссылается ссылка EXTERNAL DATA SOURCE.

ВНЕШНЯЯ ТАБЛИЦА

Пользователь с разрешениями на чтение таблицы может получить доступ к внешним файлам с помощью ВНЕШНЕЙ ТАБЛИЦЫ, созданной в верхней части набора папок и файлов службы хранилища Azure.

Пользователь с разрешениями на создание внешней таблицы (например, CREATE TABLE и ALTER ANY CREDENTIAL или REFERENCES DATABASE SCOPED CREDENTIAL) может использовать следующий сценарий для создания таблицы поверх источника данных службы хранилища Azure:

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

Пользователь, считывающий данные из этой таблицы, должен иметь доступ к файлам. Пользователи должны быть олицетворены с помощью маркера SAS или управляемого удостоверения рабочей области , если они не могут напрямую получить доступ к файлам с помощью удостоверения Microsoft Entra или анонимного доступа.

DATABASE SCOPED CREDENTIAL указывает, как получить доступ к файлам в источнике данных, на который ссылается ссылка. Пользователю с разрешением CONTROL DATABASE потребуется создать DATABASE SCOPED CREDENTIAL, который будет использоваться для доступа к хранилищу и внешнему источнику ДАННЫХ, который указывает URL-адрес источника данных и учетных данных, которые следует использовать:

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

Чтение внешних файлов с помощью EXTERNAL TABLE

EXTERNAL TABLE позволяет считывать данные из файлов, на которые ссылается источник данных, с помощью стандартной инструкции SQL SELECT:

SELECT *
FROM dbo.DimProductsExternal

Вызывающий объект должен иметь следующие разрешения для чтения данных:

  • SELECT разрешение НА внешнюю таблицу
  • REFERENCES DATABASE SCOPED CREDENTIAL разрешение при DATA SOURCE наличии CREDENTIAL

Разрешения

В следующей таблице перечислены необходимые разрешения для операций, перечисленных выше.

Запрос Необходимые разрешения
OPENROWSET(BULK) без источника данных ADMINISTER BULK OPERATIONS, ADMINISTER DATABASE BULK OPERATIONSили имя входа SQL должно иметь ССЫЛКИ CREDENTIAL::<URL> для хранилища, защищенного SAS
OPENROWSET(BULK) с источником данных без учетных данных ADMINISTER BULK OPERATIONS или ADMINISTER DATABASE BULK OPERATIONS,
OPENROWSET(BULK) с источником данных с учетными данными REFERENCES DATABASE SCOPED CREDENTIAL и одно из ADMINISTER BULK OPERATIONS или ADMINISTER DATABASE BULK OPERATIONS
СОЗДАНИЕ ВНЕШНЕГО ИСТОЧНИКА ДАННЫХ ALTER ANY EXTERNAL DATA SOURCE и REFERENCES DATABASE SCOPED CREDENTIAL.
СОЗДАТЬ ВНЕШНЮЮ ТАБЛИЦУ CREATE TABLE, ALTER ANY SCHEMA, ALTER ANY EXTERNAL FILE FORMAT и ALTER ANY EXTERNAL DATA SOURCE
ВЫБОР ИЗ ВНЕШНЕЙ ТАБЛИЦЫ SELECT TABLE и REFERENCES DATABASE SCOPED CREDENTIAL.
CETAS Создание таблицы — CREATE TABLE, ALTER ANY SCHEMA, ALTER ANY DATA SOURCEи ALTER ANY EXTERNAL FILE FORMAT. Чтение данных: ADMINISTER BULK OPERATIONS или REFERENCES CREDENTIAL или SELECT TABLE для каждой таблицы, представления или функции в запросе + права R/W на хранилище

Дальнейшие действия

Теперь вы готовы продолжить работу со следующими статьями о том, как: