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


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

Рабочая область 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.

This article focuses on lake databases in a serverless SQL pool in Azure Synapse Analytics.

Azure Synapse Analytics позволяет создавать базы данных и таблицы озера с помощью Spark или конструктора баз данных, а затем анализировать данные в базах данных озера с помощью бессерверного пула SQL. The lake databases and the tables (parquet or CSV-backed) that are created on the Apache Spark pools, lake database templates, or Dataverse are automatically available for querying with the serverless SQL pool engine. The lake databases and tables that are modified are available in serverless SQL pool after some time. Существует задержка до тех пор, пока изменения, внесенные в Spark или дизайнере базы данных, не отобразятся в безсерверной архитектуре.

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

Для управления базами данных озера, созданными Spark, можно использовать пулы Apache Spark или конструктор баз данных. For example, create or delete a lake database through a Spark pool job. Базу данных озера или объекты в ней нельзя создать с помощью бессерверного пула SQL.

The Spark default database is available in the serverless SQL pool context as a lake database called default.

Примечание.

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

Tables in the lake databases can't be modified from a serverless SQL pool. Используйте конструктор баз данных или пулы Apache Spark для изменения базы данных озера. Бессерверный пул SQL позволяет вносить следующие изменения в базу данных озера с помощью команд T-SQL:

  • Add, alter, and drop views, procedures, inline table-value functions in a lake database.
  • Add and remove database-scoped Microsoft Entra users.
  • Добавьте пользователей базы данных Microsoft Entra в роль db_datareader или удалите их из неё. Пользователи базы данных Microsoft Entra в роли db_datareader имеют разрешение на чтение всех таблиц в озерной базе данных, но не могут считывать данные из других баз данных.

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

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

  • The underlying storage layer by assigning to Microsoft Entra users one of the following:
    • Управление доступом на основе ролей в Azure (Azure RBAC)
    • Роль управления доступом на основе атрибутов Azure (Azure ABAC)
    • Разрешения списка управления доступом (ACL)
  • The SQL layer where you can define a Microsoft Entra user and grant SQL permissions to SELECT data from tables referencing the lake data.

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

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

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

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

For example, in https://<storage-name>.dfs.core.windows.net/<fs>/synapse/workspaces/<synapse_ws>/warehouse/mytestdb.db/myparquettable/, security principals need:

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

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

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

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

  • Administrators: Assign the Synapse SQL Administrator workspace role or sysadmin server-level role inside the serverless SQL pool. Эта роль полностью контролирует все базы данных. Роли Администратор Synapse и Администратор Synapse SQL также по умолчанию обладают всеми разрешениями в отношении всех объектов в бессерверном пуле SQL.
  • Workspace readers: Grant the server-level permissions GRANT CONNECT ANY DATABASE and GRANT SELECT ALL USER SECURABLES on serverless SQL pool to a login that enables the login to access and read any database. Это может быть подходящим вариантом для назначения пользователю доступа для чтения и без прав администратора.
  • Читатели баз данных: создайте пользователей базы данных из Microsoft Entra ID в озерной базе данных и добавьте их в роль db_datareader, что дает им возможность читать данные в озерной базе данных.

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

Custom SQL objects in lake databases

Озерные базы данных позволяют создавать пользовательские объекты T-SQL, такие как схемы, процедуры, представления и встроенные табличные функции значений (iTVFs). Чтобы создать пользовательские объекты SQL, НЕОБХОДИМО создать схему, в которой будут размещаться объекты. Custom SQL objects can't be placed in dbo schema because it's reserved for the lake tables that are defined in Spark, database designer, or Dataverse.

Внимание

Необходимо создать пользовательскую схему SQL, в которой будут размещаться объекты SQL. Пользовательские объекты SQL нельзя поместить в схему dbo . The dbo schema is reserved for the lake tables that are originally created in Spark or database designer.

Примеры

Create SQL database reader in lake database

В этом примере мы добавим пользователя 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]

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

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

Сначала создайте новую базу данных Spark с именем mytestlakedb с помощью кластера 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