Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Каталог 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барьера, они не защищают от атак зондирования, где пользователь создает предикат с побочными эффектами для вывода информации о фильтруемых строках. Ознакомьтесь с разделом "Общие сведения о принудительном отправке предиката" в защищенных таблицах.