grants
Вы можете управлять доступом к наборам данных, которые вы создаете с помощью dbt, используя права доступа (grants). Чтобы реализовать эти разрешения, определите права доступа в качестве конфигураций ресурсов для каждой модели, семени или снимка. Определите стандартные права доступа, которые применяются ко всему проекту, в вашем dbt_project.yml
, и определите специфические для модели права доступа в SQL или YAML файле каждой модели.
Конфигурации ресурсов прав доступа позволяют вам применять разрешения во время сборки к определенному набору получателей и модели, семени или снимку. Когда ваша модель, семя или снимок завершает сборку, dbt гарантирует, что права доступа на его представление или таблицу точно соответствуют правам доступа, которые вы настроили.
dbt стремится использовать наиболее эффективный подход при обновлении прав доступа, который варьируется в зависимости от используемого адаптера и того, заменяет ли dbt или обновляет существующий объект. Вы всегда можете проверить журналы отладки для полного набора операторов grant и revoke, которые выполняет dbt.
dbt рекомендует использовать права доступа в качестве конфигураций ресурсов, когда это возможно. В версиях до Core v1.2 вы были ограничены использованием хуков для прав доступа. Иногда вам все же может понадобиться вручную написать операторы прав доступа и выполнить их с помощью хуков. Например, хуки могут быть уместны, если вы хотите:
- Применить права доступа более сложным или индивидуальным образом, чем это может предоставить встроенная функция прав доступа.
- Применить права доступа к другим объектам базы данных, кроме представлений и таблиц.
- Воспользоваться более продвинутыми возможностями разрешений, предлагаемыми вашей платформой данных, для которых dbt (пока что!) не предлагает встроенной поддержки с использованием конфигурации ресурсов.
- Создать более детализированный доступ на уровне строк и столбцов, использовать политики маскирования или применять будущие права доступа.
Для получения дополнительной информации о хуках смотрите Hooks & operations.
Определение
Вы можете использовать поле grants
для установки разрешений или прав доступа для ресурса. Когда вы run
модель, seed
данные или snapshot
набор данных, dbt выполнит операторы grant
и/или revoke
, чтобы гарантировать, что разрешения на объект базы данных соответствуют правам доступа, которые вы настроили для ресурса.
Как и все конфигурации, grants
будут включены в метаданные проекта dbt, включая артефакт манифеста.
Общий синтаксис
Права доступа имеют два ключевых компонента:
- Привилегия: Право выполнять конкретное действие или набор действий над объектом в базе данных, например, выбирать данные из таблицы.
- Получатели: Один или несколько получателей предоставленных привилегий. Некоторые платформы также называют их "принципалами". Например, получателем может быть пользователь, группа пользователей, роль, занимаемая одним или несколькими пользователями (Snowflake), или сервисная учетная запись (BigQuery/GCP).
Настройка прав доступа
Вы можете настроить grants
в dbt_project.yml
, чтобы применить права доступа ко многим ресурсам сразу — ко всем моделям в вашем проекте, пакету или подпапке — а также вы можете настраивать grants
по одному для конкретных ресурсов в блоках YAML config:
или прямо в их .sql
файлах.
- Models
- Seeds
- Snapshots
models:
- name: specific_model
config:
grants:
select: ['reporter', 'bi']
Конфигурацию grants
также можно определить:
- в блоке конфигурации
models
вdbt_project.yml
- в макросе
config()
Jinja в SQL файле модели
Смотрите configs and properties для получения подробной информации.
seeds:
- name: seed_name
config:
grants:
select: ['reporter', 'bi']
Конфигурацию grants
также можно определить в блоке конфигурации seeds
в dbt_project.yml
. Смотрите configs and properties для получения подробной информации.
snapshots:
- name: snapshot_name
config:
grants:
select: ['reporter', 'bi']
Конфигурацию grants
также можно определить:
- в блоке конфигурации
snapshots
вdbt_project.yml
- в макросе
config()
Jinja в SQL блоке снимка
Смотрите configs and properties для получения подробной информации.