Привилегии хранилища метаданных 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
Где:
privilege_type
— это тип привилегий хранилища метаданных Hivesecurable_object
— это защищаемый объект в хранилище метаданных Hiveprincipal
— пользователь, субъект-служба (представленный значением applicationId) или группа. Необходимо заключать пользователей, субъектов-служб и имена групп со специальными символами в обратные символы (` `
). См. раздел "Субъект".
Чтобы предоставить права всем пользователям в рабочей области, предоставьте группе права 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 true
Spark. Они включены по умолчанию во всех поддерживаемых версиях 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