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

Рабочая область Azure Synapse Analytics позволяет создавать два типа баз данных на основе озера данных Spark:

  • Базы данных озера, в которых можно определять таблицы на основе данных озера с помощью записных книжек Apache Spark, шаблонов баз данных или Microsoft Dataverse (ранее Common Data Service). Эти таблицы будут доступны для запросов с помощью языка T-SQL (Transact-SQL) через бессерверный пул SQL.
  • Базы данных SQL, в которых можно определить собственные базы данных и таблицы непосредственно с помощью бессерверных пулов SQL. Инструкция T-SQL CREATE DATABASE, CREATE EXTERNAL TABLE позволяет определить объекты и добавить к таблицам дополнительные представления, процедуры и встроенные функции табличного значения SQL.

Diagram that shows Lake and SQL databases that are created on top of Data Lake files.

В этой статье рассматриваются базы данных озера в бессерверном пуле SQL в Azure Synapse Analytics.

Azure Synapse Analytics позволяет создавать базы данных и таблицы озера с помощью Spark или конструктора баз данных, а затем анализировать данные в базах данных озера с помощью бессерверного пула SQL. Базы данных и таблицы озера (Parquet или CSV), созданные в пулах Apache Spark, шаблонах баз данных или Dataverse, автоматически становятся доступными для запросов с использованием ядра бессерверного пула SQL. Измененные базы данных и таблицы озера будут доступны в бессерверном пуле SQL через некоторое время. Изменения, внесенные в Spark или конструкторе баз данных, отобразятся в бессерверных средах не сразу.

Управление базой данных озера

Для управления базами данных озера, созданными в Spark, можно использовать пулы Apache Spark или конструктор баз данных. Например, создайте или удалите базу данных озера с помощью задания пула Spark. Базу данных озера или объекты в ней нельзя создать с помощью бессерверного пула SQL.

Заданная база данных Spark default будет отображаться в контексте бессерверного пула SQL как база данных озера с именем default.

Примечание.

В бессерверном пуле SQL нельзя создать озеро и базу данных SQL с тем же именем.

Таблицы в базах данных озера нельзя изменить из бессерверного пула SQL. Для изменения баз данных озера используйте конструктор баз данных или пулы Apache Spark. Бессерверный пул SQL позволяет вносить следующие изменения в базу данных озера с помощью команд Transact-SQL:

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

Модель безопасности

Базы данных и таблицы озера защищены на двух уровнях.

  • Базовый уровень хранилища, назначив пользователям Microsoft Entra одно из следующих элементов:
    • Управление доступом на основе ролей в Azure (Azure RBAC)
    • Роль управления доступом на основе атрибутов Azure (Azure ABAC)
    • Разрешение ACL
  • Уровень SQL, в котором можно определить пользователя Microsoft Entra и предоставить sql разрешения SELECT данных из таблиц, ссылающихся на данные озера.

Модель безопасности озера

Доступ к файлам базы данных озера контролируется с помощью разрешений озера на уровне хранилища. Только пользователи Microsoft Entra могут использовать таблицы в базах данных озера, и они могут получить доступ к данным в озере с помощью собственных удостоверений.

Вы можете предоставить доступ к базовым данным, используемым для внешних таблиц субъекту безопасности, например пользователю, приложению Microsoft Entra с назначенным субъектом-службой или группе безопасности. Для доступа к данным предоставьте оба следующих разрешения:

  • Предоставьте разрешение read (R) для файлов (например, базовых файлов данных таблицы).
  • Предоставьте разрешение execute (X) для папки, в которой хранятся файлы, и в каждой родительской папке вплоть до корневого каталога. Дополнительные сведения об указанных выше разрешениях см. на странице Списки управления доступом.

Например, в https://<storage-name>.dfs.core.windows.net/<fs>/synapse/workspaces/<synapse_ws>/warehouse/mytestdb.db/myparquettable/ субъектам безопасности требуются:

  • Разрешения execute (X) для всех папок от <fs> до myparquettable.
  • Разрешения read (R) для myparquettable и файлов в этой папке, чтобы можно было считать таблицу в базе данных (синхронизированную или оригинальную).

Если субъекту безопасности требуется возможность создавать или удалять объекты в базе данных, для папок и файлов в папке warehouse требуются дополнительные разрешения write (W). Объекты в базе данных нельзя изменить из бессерверного пула SQL, это можно сделать только из пулов Spark и конструктора баз данных.

Модель безопасности SQL

Рабочая область Synapse предоставляет конечную точку T-SQL, которая позволяет отправлять запросы к базе данных озера с помощью бессерверного пула SQL. Помимо доступа к данным, интерфейс SQL позволяет управлять доступом к таблицам. Необходимо разрешить пользователю доступ к общим базам данных озера с помощью бессерверного пула SQL. Существует два типа пользователей, которые могут получить доступ к базам данных озера.

  • Администраторы: назначьте роль рабочей области Администратор Synapse SQL или роль на уровне сервера sysadmin в бессерверном пуле SQL. Эта роль полностью контролирует все базы данных. Роли Администратор Synapse и Администратор Synapse SQL также по умолчанию обладают всеми разрешениями в отношении всех объектов в бессерверном пуле SQL.
  • Читатели рабочих областей: предоставьте пользователю разрешения на уровне сервера GRANT CONNECT ANY DATABASE и GRANT SELECT ALL USER SECURABLES в бессерверном пуле SQL, чтобы он мог получить доступ к любой базе данных и считать ее. Это может быть подходящим вариантом для назначения пользователю доступа для чтения и без прав администратора.
  • Читатели баз данных: создайте пользователей базы данных из идентификатора Microsoft Entra в базе данных озера и добавьте их в роль db_datareader , что позволит им считывать данные в базе данных озера.

Дополнительные сведения о настройке управления доступом к общим базам данных см. здесь.

Пользовательские объекты SQL в базах данных озера

Базы данных озера позволяют создавать пользовательские объекты T-SQL — схемы, процедуры, представления и встроенные функции табличного значения (iTVFs). Чтобы создать пользовательские объекты SQL, НЕОБХОДИМО создать схему, в которой будут размещаться объекты. Пользовательские объекты SQL нельзя поместить в схему dbo, так как они зарезервированы для таблиц озера, определенных в Spark, конструкторе баз данных или Dataverse.

Важно!

Необходимо создать пользовательскую схему SQL, в которой будут размещаться объекты SQL. Пользовательские объекты SQL нельзя поместить в схему dbo. Схема dbo зарезервирована для таблиц озера, изначально созданных в Spark или конструкторе баз данных.

Примеры

Создание читателя базы данных SQL в базе данных озера

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

CREATE USER [customuser@contoso.com] FROM EXTERNAL PROVIDER;
GO
ALTER ROLE db_datareader
ADD MEMBER [customuser@contoso.com];

Создание средства чтения данных на уровне рабочей области

Пользователь с разрешениями GRANT CONNECT ANY DATABASE и GRANT SELECT ALL USER SECURABLES может считывать все таблицы с помощью бессерверного пула SQL, но не может создавать базы данных SQL или изменять в них объекты.

CREATE LOGIN [wsdatareader@contoso.com] FROM EXTERNAL PROVIDER
GRANT CONNECT ANY DATABASE TO [wsdatareader@contoso.com]
GRANT SELECT ALL USER SECURABLES TO [wsdatareader@contoso.com]

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

Создание базы данных Spark и подключение к ней с помощью бессерверного пула SQL

Сначала создайте базу данных Spark с именем mytestdb, используя кластер Spark, который уже создан в рабочей области. Это можно сделать, например, с помощью записной книжки Spark C# со следующей инструкцией .NET для Spark.

spark.sql("CREATE DATABASE mytestlakedb")

После короткой задержки вы увидите базу данных озера в бессерверном пуле SQL. Например, выполните следующую инструкцию из бессерверного пула SQL.

SELECT * FROM sys.databases;

Убедитесь, что mytestlakedb есть в результатах.

Создание пользовательских объектов SQL в базе данных озера

В следующем примере показано, как создать пользовательское представление, процедуру и встроенную функцию табличного значения (iTVF) в схеме reports.

CREATE SCHEMA reports
GO

CREATE OR ALTER VIEW reports.GreenReport
AS SELECT puYear, puMonth,
            fareAmount = SUM(fareAmount),
            tipAmount = SUM(tipAmount),
            mtaTax = SUM(mtaTax)
FROM dbo.green
GROUP BY puYear, puMonth
GO

CREATE OR ALTER PROCEDURE reports.GreenReportSummary
AS BEGIN
SELECT puYear, puMonth,
            fareAmount = SUM(fareAmount),
            tipAmount = SUM(tipAmount),
            mtaTax = SUM(mtaTax)
FROM dbo.green
GROUP BY puYear, puMonth
END
GO

CREATE OR ALTER FUNCTION reports.GreenDataReportMonthly(@year int)
RETURNS TABLE
RETURN ( SELECT puYear = @year, puMonth,
                fareAmount = SUM(fareAmount),
                tipAmount = SUM(tipAmount),
                mtaTax = SUM(mtaTax)
        FROM dbo.green
        WHERE puYear = @year
        GROUP BY puMonth )
GO

Следующие шаги