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

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

Примечание.

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

Requirements

Примечание.

  • Управление доступом к данным всегда включено в 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 на уровне рабочей области.

Примечание.

Чтобы использовать эти функции в Databricks Runtime 7.3 LTS, необходимо задать конфигурацию spark.databricks.userInfoFunctions.enabled trueSpark. Они включены по умолчанию во всех поддерживаемых версиях Databricks Runtime выше 7.3.

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

-- 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