Отказ от ответственности: Все мнения и взгляды, выраженные в блоге, принадлежат исключительно автору и не обязательно отражают точку зрения работодателя автора или любой другой группы или лица. Эта статья не является продвижением какой-либо облачной/платформы управления данными. Все изображения и фрагменты кода общедоступны на веб-сайте Azure/Databricks.
В этой статье я предоставлю скрипт для автоматизации управления разрешениями на уровне схемы Unity Catalog.
Привилегии на уровне схемы Unity Catalog
Иерархическая модель привилегий в Unity Catalog позволяет пользователям применять привилегии на любом уровне иерархии, и дочерний объект(ы) автоматически наследуют те же разрешения. Таким образом, если разрешение применено на уровне схемы, оно автоматически применяется ко всем таблицам, представлениям, объемам и функциям внутри схемы.
В Unity Catalog (Databricks) разрешения на уровне схемы применяются, когда вы хотите контролировать доступ к набору таблиц и представлений в определенной схеме. Разрешения на уровне схемы обычно применяются в следующих сценариях:
- Предоставление доступа к группам объектов: Если вы хотите управлять разрешениями для нескольких таблиц и представлений коллективно, эффективнее применять разрешения на уровне схемы, а не индивидуально для каждой таблицы или представления. Это позволяет контролировать доступ ко всем объектам в этой схеме одновременно.
- Организационный контроль: Когда различные команды или отделы внутри организации нуждаются в доступе к определенным наборам данных, которые хранятся в отдельных схемах. Применение разрешений на уровне схемы позволяет предоставлять или ограничивать доступ ко всем объектам, относящимся к команде в пределах этой схемы.
- Согласованное управление разрешениями: Для сред, где новые объекты (таблицы/представления) часто добавляются в схему, установка разрешений на уровне схемы обеспечивает автоматическое наследование разрешений новыми объектами, сокращая необходимость вручных обновлений разрешений.
- Поддержание безопасности данных: Когда вы хотите обеспечить контроль доступа к определенной категории набора данных (например, финансовым данным, данным HR), логически организованным в рамках схемы. Установка разрешений на уровне схемы позволяет поддерживать безопасность данных, упрощая администрирование.
Сценарий автоматизации
Предварительные требования
- Unity Catalog уже настроен.
- Принципал(ы) связаны с рабочим пространством Databricks.
- Пользователь, запускающий сценарий разрешений, имеет соответствующие разрешения на схему и каталог.
Шаг 1: Создание блокнота и объявление переменных
Создайте блокнот в рабочем пространстве Databricks. Чтобы создать блокнот в своем рабочем пространстве, щелкните “+” Новый на боковой панели, затем выберите Блокнот.
Скопируйте и вставьте фрагмент кода ниже в ячейку блокнота и запустите ячейку.
catalog = 'main' # Specify your catalog name
schema = 'default' # Specify your schema name
principals_arr = '' # Specify the Comma(,) seperated values for principals in the blank text section (e.g. groups, username)
principals = principals_arr.split(',')
privileges_arr = 'SELECT,APPLY TAG' # Specify the Comma(,) seperated values for priviledges in the blank text section (e.g. SELECT,APPLY TAG)
privileges = privileges_arr.split(',')
Шаг 2: Установите каталог и схему
Скопируйте, вставьте и запустите блок кода ниже в новой или существующей ячейке, а затем запустите ячейку.
query = f"USE CATALOG `{catalog}`" #Sets the Catalog
spark.sql(query)
Шаг 3: Переберите принципалов и привилегии и примените разрешения в каталоге и схеме
Скопируйте, вставьте и запустите блок кода ниже в новой или существующей ячейке, затем запустите ячейку для применения разрешений.
for principal in principals:
query = f"GRANT USE_CATALOG ON CATALOG `{catalog}` TO `{principal}`" # Apply use catalog permission at Catalog level
spark.sql(query)
query = f"USE SCHEMA `{schema}`" # Sets the schema
spark.sql(query)
query = f"GRANT USE_SCHEMA ON SCHEMA `{schema}` TO `{principal}`" # Apply use schema permission at Schema level
spark.sql(query)
for privilege in privileges:
query = f"GRANT `{privilege}` ON SCHEMA `{schema}` TO `{principal}`" # Use schema permission at Schema level
spark.sql(query)
Проверка
Вы можете проверить привилегии, открыв Databricks UI и перейдя в раздел Каталог в Проводнике данных. Как только каталог появится в разделе Данные, щелкните по каталогу, затем выберите схему, к которой применены разрешения, и перейдите на вкладку Разрешения. Теперь вы можете увидеть все привилегии, примененные к схеме.
Также вы можете запустить SQL-скрипт ниже в блокноте, чтобы отобразить все разрешения для схемы в рамках вашей проверки.
SHOW GRANTS ON SCHEMA my_schema;
Заключение
Автоматизация управления привилегиями в Каталоге Unity Databricks на уровне схемы помогает обеспечить последовательный и эффективный контроль доступа к группе объектов (например, таблицы, представления, функции и тома) в каталоге. Предоставленный код демонстрирует практический способ назначения привилегий на уровне схемы, что упрощает управление разрешениями среди принципалов (например, пользователей и групп). Этот подход сокращает задачи управления и вероятность ручных ошибок путем группировки таблиц и представлений внутри схемы и применения последовательных разрешений для всей схемы.
Source:
https://dzone.com/articles/automate-databricks-unity-catalog-permissions-at-schema-level