Когда следует использовать ABAC по сравнению с фильтрами строк уровня таблицы и масками столбцов

Каталог Unity поддерживает два подхода к безопасности на уровне строк и на уровне столбцов: политики ABAC и фильтры строк на уровне таблицы и маски столбцов. Ни один из подходов не предоставляет доступ к данным самостоятельно— оба добавляют ограничения на основе существующих привилегий на уровне объектов. Необходимо предоставить доступ к базовой таблице отдельно с помощью разрешений на уровне объекта (GRANT).

Основное различие заключается в определении ограничений. Фильтры строк на уровне таблицы и маски столбцов применяют элементы управления конфиденциальностью непосредственно к отдельным таблицам с помощью ALTER TABLE. Владельцы таблиц управляют собственной защитой данных, не нуждаясь в системе управляемых тегов. Это просто для небольшого количества таблиц, но каждая таблица должна быть настроена по отдельности, и владельцы таблиц могут изменять или удалять собственные фильтры и маски.

Политики ABAC применяются на уровне каталога, схемы или таблицы и динамически сопоставляют таблицы и столбцы на основе контролируемых тегов. Политика, определенная на уровне каталога, применяется ко всем таблицам в этом каталоге, а отдельные владельцы таблиц не могут удалять, изменять или обходить их. Политика хранится в каталоге и оценивается каталогом Unity перед тем, как запрос достигает среды выполнения. Это позволяет администраторам более высокого уровня применять правила всей организации и гарантировать, что администраторы и владельцы более низкого уровня не могут обойти их.

Подробные сведения о сравнении

В этой таблице перечислены различия между политиками ABAC и фильтрами строк уровня таблицы и масками столбцов.

Рассмотрение Политики ABAC Фильтры строк на уровне таблицы и маски столбцов
Синтаксис SQL CREATE POLICY ... ON CATALOG/SCHEMA/TABLE ALTER TABLE ... SET ROW FILTER / ALTER TABLE ... ALTER COLUMN ... SET MASK
Объем Все таблицы с областью политики (каталог, схема или таблица) и их потомки. Новые таблицы с тегами автоматически охватываются. Одна таблица, в которой настроен фильтр или маска. Каждая таблица должна быть настроена по отдельности.
Динамическое сопоставление Таблицы и столбцы сопоставляются динамически на основе управляемых тегов с помощью has_tag() и has_tag_value(). Нет динамического сопоставления. Фильтры и маски привязаны к определенным таблицам и столбцам.
Целевые субъекты TO / EXCEPT условия в определении политики, в дополнение к идентификационным функциям в UDF. Функции идентификации, такие как current_user(), в UDF.
Управление политиками Политики можно задать владельцами каталогов или схем. После установки на более высоком уровне владельцы таблиц не могут переопределить, изменить или удалить их. Управляется владельцами таблиц, которые могут изменять или удалять фильтры и маски в своих таблицах.
Неподдерживаемые функции Такие операции, как перемещение по времени, клонирование и Delta Sharing, могут выполняться принципалами в предложении EXCEPT. См. раздел "Неокрытая конструкция". Нет EXCEPT предложения, поэтому неподдерживаемые функции остаются недоступными для защищенных таблиц.
Действующие политики SHOW EFFECTIVE POLICIES чтобы узнать, какие политики применяются к данной таблице и пользователю. Непосредственно отображается в определении таблицы.
Возможность аудита DESCRIBE POLICY и SHOW POLICIES для проверки определений политик. INFORMATION_SCHEMA.ROW_FILTERS и INFORMATION_SCHEMA.COLUMN_MASKS.

Как правило, используйте политики ABAC при следующих случаях:

  • Вам нужны согласованные правила доступа во многих таблицах, схемах или каталогах.
  • Ваша организация отделяет обязанности. Например, создатели политик определяют правила, а ответственные за данные классифицируют данные с помощью тегов.
  • Ваше хранилище данных растет, и вы хотите, чтобы новые таблицы автоматически охватывались, когда они помечены.
  • Вам потребуется EXCEPT предложение, чтобы разрешить такие операции, как перемещение во времени, Delta Sharing или полная оптимизация запросов для конкретных субъектов.

Как правило, используйте фильтры строк на уровне таблицы и маски столбцов , если:

  • Каждая таблица имеет строгую логику, которая не обобщает другие таблицы.
  • Владельцы таблиц должны управлять собственными фильтрами и масками напрямую без централизованной системы тегов.
  • У вас есть небольшой стабильный набор таблиц, изменяющихся редко.

Совмещение ABAC с фильтрами строк на уровне таблицы и масками столбцов

Фильтры строк и маски столбцов в таблице могут сосуществовать с ABAC в одной таблице. Во время запроса политики оцениваются независимо для запрашивающего пользователя со следующими правилами:

  • Может применяться только один отдельный фильтр строк.
  • Для каждого столбца можно определить только одну уникальную маску столбца.

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

Дополнительные сведения о разрешении конфликтов и устранении неполадок см. в разделе "Правила" для нескольких фильтров и маск.

Безопасность на уровне строк и на уровне столбцов с динамическими представлениями

Динамические представления также могут реализовать безопасность на уровне строк и на уровне столбцов, внедряя такие функции удостоверений, как current_user() и is_account_group_member() непосредственно в определении представления. Динамические представления, фильтры строк и маски столбцов применяют логику фильтрации или преобразования во время запроса, но отличаются тем, как они управляются, в каких пределах настраиваются и предоставляются пользователям.

Применимо к Как она управляется Лучше всего использовать для
динамические представления Views Логика SQL в определении представления Детализированное управление доступом, которое охватывает несколько исходных таблиц или преобразующее данные для обмена
Фильтры строк и маски столбцов Таблицы и столбцы Политики ABAC или назначение прав на уровне таблицы Управление доступом на уровне строк и на уровне столбцов без введения новых объектов

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

Например, динамическое представление может маскировать столбец почтовой электронной почты для не-аудиторов.

CREATE VIEW sales_redacted AS
SELECT
  user_id,
  CASE
    WHEN is_account_group_member('auditors') THEN email
    ELSE regexp_extract(email, '^.*@(.*)$', 1)
  END AS email,
  country,
  product,
  total
FROM sales_raw

Динамические представления полностью поддерживают оптимизацию запросов и использование предиката для снижения нагрузки, поэтому они могут обеспечивать лучшую производительность запросов, чем фильтры строк и маски столбцов. Кроме того, пользователи не могут изменять базовые таблицы.

Однако динамические представления имеют два недостатка для управления данными:

  • Ограниченный аудит. Динамические представления не имеют семантических метаданных, таких как теги или определения политик в системных таблицах, что затрудняет их аудит в масштабе.
  • Уязвимость к зондированию: поскольку они не имеют SecureView барьера, они не защищают от атак зондирования, где пользователь создает предикат с побочными эффектами для вывода информации о фильтруемых строках. Ознакомьтесь с разделом "Общие сведения о принудительном отправке предиката" в защищенных таблицах.