Междвижковые средства управления доступом на основе атрибутов (ABAC)

Important

Кросс-обработчик ABAC находится в бета-версии.

Внешние механизмы могут читать таблицы Unity Catalog с применением детализированных средств контроля доступа. Это включает как политики управления доступом на основе атрибутов (ABAC), так и автономные фильтры строк и маски столбцов, все динамически применяются даже при запросе извне Azure Databricks.

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

Requirements

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

Создайте управляемую таблицу Delta с коммитами каталога

Чтобы создать новую управляемую таблицу Delta с фиксацией изменений в каталоге (требуется Databricks Runtime 16.4 и более поздних версий):

CREATE TABLE <catalog>.<schema>.<table> (id INT, name STRING)
TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported') USING delta;

Для обновления существующей управляемой таблицы (требуется Среда выполнения Databricks 18.0 и выше):

ALTER TABLE <catalog>.<schema>.<table>
SET TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported');

После создания таблицы можно применить политики ABAC, фильтры строк или маски столбцов.

См. Создание политики или Применение фильтров строк и масок столбцов вручную.

Чтение таблиц с помощью Apache Spark (Delta)

Настройте Apache Spark с Delta-Spark версии 4.1 или выше и коннектором Spark для Unity Catalog версии 0.4 или выше.

"spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension",
"spark.sql.catalog.spark_catalog": "io.unitycatalog.spark.UCSingleCatalog",
"spark.sql.catalog.<uc-catalog-name>": "io.unitycatalog.spark.UCSingleCatalog",
"spark.sql.catalog.<uc-catalog-name>.uri": "<workspace-url>",
"spark.sql.catalog.<uc-catalog-name>.auth.type": "oauth",
"spark.sql.catalog.<uc-catalog-name>.auth.oauth.uri": "<oauth-token-endpoint>",
"spark.sql.catalog.<uc-catalog-name>.auth.oauth.clientId": "<oauth-client-id>",
"spark.sql.catalog.<uc-catalog-name>.auth.oauth.clientSecret": "<oauth-client-secret>",
"spark.sql.catalog.<uc-catalog-name>.ServerSidePlanning.enabled": "true",
"spark.sql.defaultCatalog": "<uc-catalog-name>",
"spark.jars.packages": "io.delta:delta-spark_4.0_2.13:4.1.0,io.delta:delta-iceberg_2.13:4.1.0,io.unitycatalog:unitycatalog-spark_2.13:0.4.0,org.apache.hadoop:hadoop-azure:3.4.2"

Note

Установите ServerSidePlanning.enabled в значение true, чтобы включить применение детализированного контроля доступа внешними механизмами.

Замените следующие переменные:

  • <uc-catalog-name>: имя каталога в каталоге Unity, содержащего таблицы.
  • <workspace-url>: URL-адрес рабочей области Azure Databricks, включая идентификатор рабочей области.
  • <oauth-token-endpoint>: URL-адрес конечной точки маркера OAuth. См Авторизация доступа сервисного принципала к Azure Databricks с помощью OAuth.
  • <oauth-client-id>: идентификатор клиента OAuth для субъекта проверки подлинности.
  • <oauth-client-secret>: секрет клиента OAuth для аутентифицирующего субъекта.

Чтение таблиц с помощью Apache Spark (Iceberg)

Настройте Apache Spark с Iceberg-Spark версии 1.11 или более поздней версии и Apache Spark 4.0 или более поздней версии.

"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",
"spark.sql.catalog.<uc-catalog-name>": "org.apache.iceberg.spark.SparkCatalog",
"spark.sql.catalog.<uc-catalog-name>.type": "rest",
"spark.sql.catalog.<uc-catalog-name>.uri": "<workspace-url>/api/2.1/unity-catalog/iceberg-rest/",
"spark.sql.catalog.<uc-catalog-name>.credential": "<oauth-client-id>:<oauth-client-secret>",
"spark.sql.catalog.<uc-catalog-name>.oauth2-server-uri": "<oauth-token-endpoint>",
"spark.sql.catalog.<uc-catalog-name>.warehouse": "<uc-catalog-name>",
"spark.sql.catalog.<uc-catalog-name>.cache-enabled": "false",
"spark.sql.defaultCatalog": "<uc-catalog-name>"

Замените следующие переменные:

  • <uc-catalog-name>: имя каталога в каталоге Unity, содержащего таблицы.
  • <workspace-url>: URL-адрес рабочей области Azure Databricks, включая идентификатор рабочей области.
  • <oauth-token-endpoint>: URL-адрес конечной точки маркера OAuth. См Авторизация доступа сервисного принципала к Azure Databricks с помощью OAuth.
  • <oauth-client-id>: идентификатор клиента OAuth для субъекта проверки подлинности.
  • <oauth-client-secret>: секрет клиента OAuth для аутентифицирующего субъекта.

Запрос данных

Вы можете запросить таблицу с помощью API Apache Spark SQL или DataFrame. Azure Databricks применяет более точные политики доступа за кулисами.

SELECT * FROM <uc-catalog-name>.<schema>.<table>;

Предупреждение

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

Затраты на бессерверные вычисления

Межплатформенный ABAC использует бессерверные вычислительные ресурсы для обеспечения соблюдения детализированных политик доступа на стороне сервера. Клиентам взимается плата за эти ресурсы. Сведения о ценах см. в разделе "Цены на бета-продукты".

Пользователи, имеющие доступ к таблице биллинговой системы, могут выполнять запросы к system.billing.usage, чтобы увидеть, какая сумма была им начислена. Например, следующий запрос разбивает затраты на вычисления по пользователям:

SELECT usage_date,
sku_name,
 identity_metadata.run_as,
SUM(usage_quantity) AS `DBUs consumed by cross-engine ABAC`
FROM system.billing.usage
WHERE usage_date BETWEEN '2026-06-01' AND '2026-07-01'
 AND billing_origin_product = 'EXTERNAL_COMPATIBILITY'
GROUP BY 1, 2, 3 ORDER BY 1;

Ограничения

  • Из внешних механизмов поддерживаются только операции чтения, если включено детализированное управление доступом (FGAC). Для записи необходимо исключить субъект записи из политики ABAC.
  • Динамические представления не поддерживаются.
  • Проецирование столбцов VARIANT не поддерживается.
  • Фильтрация по BINARY столбцам не поддерживается.
  • Функции маскирования столбцов, у которых тип возвращаемого значения отличается от исходного типа столбца, не поддерживаются.
  • При больших агрегациях возможно снижение производительности.