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


Создание динамического представления

В Unity Catalogможно использовать динамические views для настройки точного контроля доступа, включая:

  • Безопасность на уровне columns или строк.
  • Маскирование данных.

В Catalog Unity представлены следующие функции, которые позволяют динамически limit доступ пользователей к строке, columnили записи в представлении:

  • current_user(): возвращает адрес электронной почты текущего пользователя.
  • is_account_group_member(): возвращает TRUE, если текущий пользователь является членом определенной группы уровня учетной записи. Рекомендуется для использования в динамических данных views против данных Unity Catalog.
  • is_member(): возвращает TRUE, если текущий пользователь является членом определенной группы уровня рабочей области. Эта функция предоставляется для совместимости с существующим хранилищем метаданных Hive. Не используйте его с views для данных Unity Catalog, так как он не оценивает членство в группе на уровне учетной записи.

Azure Databricks рекомендует не grant пользователям возможность читать tables и views, на которые ссылается представление.

В следующих примерах показано, как создать динамические views в Unity Catalog.

Подготовка к работе

Для создания или чтения динамических viewsтребования те же, что и для стандартных views, за исключением требований к вычислению. Необходимо использовать один из следующих вычислительных ресурсов:

  • Хранилище SQL.

  • Вычисление с общим режимом доступа.

  • Вычисление с одним режимом доступа пользователей в Databricks Runtime 15.4 LTS или более поздней версии.

    Вы не можете считывать динамические данные views, используя вычислительные мощности одного пользователя в Databricks Runtime 15.3 или ниже.

    Чтобы воспользоваться преимуществами фильтрации данных, предоставляемых в Databricks Runtime 15.4 LTS и более поздних версиях, необходимо также убедиться, что рабочей области включена для бессерверных вычислительных, так как функции фильтрации данных, поддерживающие динамические views выполняются на бессерверных вычислениях. Таким образом, может взиматься плата за бессерверные вычислительные ресурсы, когда вы используете одно-пользовательские вычисления для обработки динамических views. Подробные инструкции по управлению доступом для отдельных пользователей.

Columnуровня разрешения

С помощью динамического представления вы можете limit, к чему именно пользователь или группа columns могут получить доступ. В следующем примере только члены группы auditors могут получить доступ к адресам электронной почты из sales_rawtable. Во время анализа запросов Apache Spark заменяет выражение CASE литеральной строкой REDACTED или фактическим содержимым адреса электронной почты column. Другие columns возвращаются как обычным образом. Эта стратегия не оказывает негативного влияния на производительность запросов.

-- Alias the field 'email' to itself (as 'email') to prevent the
-- permission logic from showing up directly in the column name results.
CREATE VIEW sales_redacted AS
SELECT
  user_id,
  CASE WHEN
    is_account_group_member('auditors') THEN email
    ELSE 'REDACTED'
  END AS email,
  country,
  product,
  total
FROM sales_raw

Разрешения уровня строк

С помощью динамического представления можно указать разрешения на уровне строк или полей. В следующем примере только члены группы managers могут просматривать суммы транзакций, превышающих 1 000 000 долл. США. Для других пользователей соответствующие результаты будут отфильтрованы.

CREATE VIEW sales_redacted AS
SELECT
  user_id,
  country,
  product,
  total
FROM sales_raw
WHERE
  CASE
    WHEN is_account_group_member('managers') THEN TRUE
    ELSE total <= 1000000
  END;

Маскирование данных

Поскольку views в Unity Catalog используется Spark SQL, можно реализовать расширенное маскирование данных с помощью более сложных выражений SQL и регулярных выражений. В следующем примере все пользователи могут анализировать домены электронной почты, но только члены группы auditors могут видеть полный адрес электронной почты пользователя.

-- The regexp_extract function takes an email address such as
-- user.x.lastname@example.com and extracts 'example', allowing
-- analysts to query the domain name.

CREATE VIEW sales_redacted AS
SELECT
  user_id,
  region,
  CASE
    WHEN is_account_group_member('auditors') THEN email
    ELSE regexp_extract(email, '^.*@(.*)$', 1)
  END
  FROM sales_raw