Привилегии хранилища метаданных Hive и защищаемые объекты (устаревшие версии)

В этой статье описывается модель привилегий для устаревшего хранилища метаданных Azure Databricks Hive, встроенного в каждую рабочую область Azure Databricks. В нем также описывается, как предоставлять, запрещать и отзывать привилегии для объектов в встроенном хранилище метаданных Hive. Каталог Unity использует другую модель для предоставления разрешений. См. статью Защищаемые объекты и привилегии Unity Catalog.

Примечание.

Управление доступом к таблицам для данных, управляемых хранилищем метаданных Hive, является устаревшей моделью управления данными. Databricks рекомендует обновить таблицы, управляемые хранилищем метаданных Hive, до хранилища метаданных каталога Unity. Каталог Unity помогает упростить защиту и управление данными благодаря централизованному управлению и проверке доступа к данным во множестве рабочих областей в вашей учетной записи. Дополнительные сведения о том, как устаревшая модель привилегий отличается от модели привилегий каталога Unity, см. в статье "Работа с каталогом Unity" и устаревшим хранилищем метаданных Hive.

Требования

Примечание.

  • Управление доступом к данным всегда включено в Databricks SQL, даже если управление доступом к таблицам не включено для рабочей области.
  • Если для рабочей области включен контроль доступа к таблицам и вы уже указали списки управления доступом (предоставленные и запрещенные привилегии) в рабочей области, эти списки управления доступом учитываются в Databricks SQL.

Управление привилегиями для объектов в хранилище метаданных Hive

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

Для управления привилегиями в SQL используйте инструкции GRANT, REVOKE, DENY, MSCK и SHOW GRANT в записной книжке или редакторе запросов Databricks SQL с помощью синтаксиса:

GRANT privilege_type ON securable_object TO principal

Где:

Чтобы предоставить права всем пользователям в рабочей области, предоставьте группе права users . Например:

GRANT SELECT ON TABLE <schema-name>.<table-name> TO users

Дополнительные сведения об управлении привилегиями для объектов в хранилище метаданных Hive с помощью команд SQL см. в разделе "Привилегии" и защищаемые объекты в хранилище метаданных Hive.

Вы также можете управлять доступом к таблицам в полностью автоматизированной настройке с помощью поставщика Databricks Terraform и databricks_sql_permissions.

Владелец объекта

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

Группы могут владеть объектами. В этом случае все участники этой группы считаются владельцами.

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

ALTER <object> OWNER TO `<user-name>@<user-domain>.com`

Примечание.

Если управление доступом к таблицам отключено в кластере или хранилище SQL, владельцы не будут зарегистрированы при создании схемы, таблицы или представления. Администратор рабочей области должен назначить владельца объекту с помощью ALTER <object> OWNER TO команды.

Защищаемые объекты в хранилище метаданных Hive

Защищаемые объекты:

  • CATALOG управляет доступом ко всему каталогу данных.

    • SCHEMA управляет доступом к схеме.
      • TABLE управляет доступом к управляемой или внешней таблице.
      • VIEW: управляет доступом к представлениям SQL.
      • FUNCTION управляет доступом к именованной функции.
  • ANONYMOUS FUNCTION управляет доступом к анонимным или временным функциям.

    Примечание.

    Объекты ANONYMOUS FUNCTION не поддерживаются в SQL Databricks.

  • ANY FILE управляет доступом к базовой файловой системе.

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

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

Примечание.

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

Привилегии, которые можно предоставить в объектах хранилища метаданных Hive

  • SELECT предоставляет доступ на чтение объекта.
  • CREATE позволяет создавать объект (например, таблицу в схеме).
  • MODIFY дает возможность добавлять данные в объект, удалять их и изменять в нем.
  • USAGE не дает никаких возможностей, но является дополнительным требованием для выполнения каких-либо действий с объектом схемы.
  • READ_METADATA позволяет просматривать объект и его метаданные.
  • CREATE_NAMED_FUNCTION позволяет создать именованную UDF в существующем каталоге или схеме.
  • MODIFY_CLASSPATH дает возможность добавлять файлы в путь к классу Spark.
  • ALL PRIVILEGES предоставляет все права доступа (переводится во все указанные выше привилегии).

Примечание.

Привилегия MODIFY_CLASSPATH не поддерживаются в SQL Databricks.

Привилегия USAGE

Чтобы выполнить действие для объекта схемы в хранилище метаданных Hive, пользователь должен иметь USAGE привилегии на этой схеме в дополнение к привилегии для выполнения этого действия. Любое из следующих требований удовлетворяет USAGE требованиям:

  • Быть администратором рабочей области
  • иметь привилегию USAGE для схемы или находиться в группе, имеющей привилегию USAGE для схемы;
  • иметь привилегию USAGE для CATALOG или быть в группе, имеющей привилегию USAGE;
  • быть владельцем схемы или находиться в группе, которой принадлежит схема.

Даже владелец объекта в схеме должен обладать привилегией USAGE, чтобы использовать его.

Иерархия привилегий

Если управление доступом к таблицам включено в рабочей области и на всех кластерах, объекты SQL в Azure Databricks являются иерархическими, а привилегии наследуются вниз. Это означает, что предоставление или отклонение привилегий для объекта CATALOG автоматически предоставляет или запрещает привилегию для всех схем в каталоге. Аналогичным образом, привилегии, предоставленные для объекта схемы, наследуются всеми объектами в этой схеме. Этот принцип соблюдается для всех защищаемых объектов.

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

Функции динамического представления

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

  • current_user() возвращает текущую метку времени.
  • is_member(): определяет, является ли текущий пользователь членом определенной группы Azure Databricks на уровне рабочей области.

Следующий пример объединяет обе функции, чтобы определить, имеет ли пользователь соответствующее членство в группе:

-- Return: true if the user is a member and false if they are not
SELECT
  current_user as user,
-- Check to see if the current user is a member of the "Managers" group.
  is_member("Managers") as admin

Разрешения на уровне столбцов

Динамические представления можно использовать для ограничения столбцов определенной группы или пользователя. Рассмотрим следующий пример, в котором только пользователи, входящие в группу auditors, могут просматривать адреса электронной почты из таблицы sales_raw. Во время анализа Spark заменяет инструкцию CASE либо литералом 'REDACTED', либо столбцом email. Такое поведение позволяет выполнять все обычные оптимизации производительности, предоставляемые Spark.

-- 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_group_member('auditors') THEN email
    ELSE 'REDACTED'
  END AS email,
  country,
  product,
  total
FROM sales_raw

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

С помощью динамического представления можно указать разрешения на уровне строк или полей. Рассмотрим следующий пример, в котором только пользователи, входящие в группу managers, могут видеть суммы транзакций (столбец total), превышающие 1 000 000,00 $:

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

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

Как показано в предыдущих примерах, можно реализовать маскирование на уровне столбцов, чтобы пользователи не могли видеть определенные данные столбцов, если они не находятся в нужной группе. Так как эти представления являются стандартными представлениями SQL Spark, можно выполнять более сложные типы маскирования с более сложными выражениями 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_group_member('auditors') THEN email
    ELSE regexp_extract(email, '^.*@(.*)$', 1)
  END
  FROM sales_raw