Бөлісу құралы:


Безопасность на уровне строк в OneLake (предварительная версия)

Безопасность на уровне строк (RLS) — это функция безопасности OneLake (предварительная версия), которая позволяет определять ограничения данных на уровне строк для табличных данных, хранящихся в OneLake. Пользователи могут определять роли в OneLake, содержащие правила фильтрации строк данных для членов этой роли. Когда член роли RLS отправляет запрос к этим данным, правила RLS оцениваются и возвращаются только разрешенные строки.

Примечание.

Безопасность OneLake в настоящее время находится в ограниченной предварительной версии. Чтобы запросить присоединение к предварительной версии и получить доступ к этим функциям, заполните форму по адресу https://aka.ms/onelakesecuritypreview.

Предпосылки

Обеспечение безопасности на уровне строк

OneLake security RLS применяется одним из двух способов:

  • Отфильтрованные таблицы в движках Fabric: Запросы к списку поддерживаемых движков Fabric, таких как записные книжки Spark, приводят к тому, что пользователь видит только те строки, доступ к которым ему разрешён согласно правилам RLS.
  • Заблокирован доступ к таблицам: Таблицы с правилами RLS, применяемыми к ним, не могут быть прочитаны за пределами поддерживаемых обработчиков Fabric.

Для отфильтрованных таблиц действуют следующие действия.

  • Правила RLS не ограничивают доступ пользователей в ролях администратора, участника и автора.
  • Если правило RLS имеет несоответствие с таблицей, на которой оно определено, запрос завершается неудачей, и строки не выводятся. Например, если правило RLS ссылается на столбец, который не является частью таблицы.
  • Запросы таблиц RLS завершаются ошибкой, если пользователь является частью двух разных ролей, а одна из ролей имеет безопасность на уровне столбца (CLS).
  • Правила RLS могут применяться только для объектов, которые являются таблицами Delta Parquet.
    • Правила RLS, применяемые к объектам таблицы, отличным от Delta, вместо этого блокируют доступ ко всей таблице для членов роли.
  • Доступ к таблице может быть заблокирован, если инструкция RLS содержит синтаксические ошибки, которые препятствуют его оценке.

Определение правил безопасности на уровне строк

Правила безопасности на уровне строк можно определить как часть любой роли безопасности OneLake, которая предоставляет доступ к данным таблицы в формате Delta Parquet. Строки — это понятие, относяющееся только к табличным данным, поэтому определения RLS не допускаются для папок, отличных от таблиц, или неструктурированных данных.

Правила RLS используют синтаксис SQL, чтобы указать строки, которые может видеть пользователь. Этот синтаксис принимает форму инструкции SQL SELECT с правилами RLS, определенными в предложении WHERE . Правила RLS поддерживают только подмножество языка SQL, как определено в правилах синтаксиса. Запросы с недопустимым синтаксисом RLS или синтаксисом RLS, которые не соответствуют базовой таблице, не приводят к отображению строк пользователям или ошибкам запросов в конечной точке аналитики SQL.

Рекомендуется избегать использования расплывчатых или чрезмерно сложных выражений RLS. Строго типизированные выражения с целым числом или строковыми подстановками с "=" будут наиболее безопасными и простыми для понимания.

Чтобы определить правила RLS, выполните следующие действия.

  1. Перейдите в Lakehouse и выберите "Управление безопасностью OneLake" (предварительная версия).

  2. Выберите существующую роль, для которой требуется определить безопасность таблицы или папки, или нажмите кнопку "Создать ", чтобы создать новую роль.

  3. На странице сведений о роли выберите дополнительные параметры (...) рядом с таблицей, для которой требуется определить RLS, а затем выберите Безопасность строк (предварительный просмотр).

    Снимок экрана: выбор параметра

  4. Введите инструкцию SQL для определения строк, которые нужно видеть пользователям в редакторе кода. Используйте раздел «Правила синтаксиса» для справки.

  5. Нажмите кнопку "Сохранить", чтобы подтвердить правила безопасности строк.

Включение безопасности OneLake для конечной точки аналитики SQL

Прежде чем использовать безопасность OneLake с конечной точкой аналитики SQL, необходимо включить режим удостоверения пользователя. Только что созданные конечные точки аналитики SQL по умолчанию будут использоваться в режиме идентификации пользователя, поэтому эти действия должны выполняться для существующих конечных точек аналитики SQL.

Примечание.

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

  1. Перейдите к конечной точке аналитики SQL.

  2. В конечной точке аналитики SQL перейдите на вкладку "Безопасность" на верхней ленте.

  3. Выберите удостоверение пользователя в режиме доступа OneLake.

    Снимок экрана, на котором показано, как выбрать удостоверение пользователя, чтобы включить безопасность OneLake для конечной точки аналитики SQL.

  4. В командной строке нажмите кнопку "Да", используйте удостоверение пользователя.

    Снимок экрана: запрос пользователя, который должен быть принят для включения безопасности OneLake для доступа на чтение таблицы.

Теперь конечная точка аналитики SQL готова к использованию с безопасностью OneLake.

Правила синтаксиса

Все правила безопасности на уровне строк принимают следующую форму:

SELECT * FROM {schema_name}.{table_name} WHERE {column_level_boolean_1}{column_level_boolean_2}...{column_level_boolean_N}

Рассмотрим пример.

SELECT * FROM Sales WHERE Amount>'50000' AND State='CA'

Максимальное количество символов в правиле безопасности на уровне строк — 1000.

Замещающее поле Описание
{schema_name} Имя схемы, в которой находится {table_name}. Если артефакт поддерживает схемы, требуется {schema_name}.
{table_name} Имя таблицы, к которому применяется предикат RLS. Это значение должно точно совпадать с именем таблицы, иначе результаты RLS приводят к тому, что строки не отображаются.
{column_level_boolean} Логическое утверждение, содержащее следующие компоненты:

* Имя столбца: имя столбца в {table_name}, как указано в схеме журнала Delta. Имена столбцов можно отформатировать как {column_name} или {table_name}. {column_name}.
* Оператор: один из поддерживаемых операторов, который оценивает имя столбца и значение в булево значение.
* Значение: статическое значение или набор значений для сопоставления.

Можно использовать одно или несколько логических выражений, разделенных И или ИЛИ.

Поддерживаемые операторы

Правила безопасности на уровне строк поддерживают следующий список операторов и ключевых слов:

Оператор Описание
= (равно) Возвращает значение true, если оба значения имеют один и тот же тип данных и являются точными совпадениями.
<> (не равно); Вычисляется как true, если два значения имеют разные типы данных и не являются точными совпадениями.
> (больше чем) Возвращает значение true, если значение столбца больше значения оценки. Для строковых значений этот оператор использует побитовое сравнение, чтобы определить, больше ли одна строка, чем другая.
>= (больше или равно); Возвращает true, если значение столбца больше или равно значению сравнения. Для строковых значений этот оператор использует побитовое сравнение, чтобы определить, больше ли одна строка или равна другой.
< (меньше) Равно истине, если значение в столбце меньше оцениваемого значения. Для строковых значений этот оператор использует побитовое сравнение, чтобы определить, меньше ли одна строка, чем другая строка.
<= (меньше или равно). Принимает значение true, если значение столбца меньше или равно значению для сравнения. Для строковых значений этот оператор использует побитовое сравнение, чтобы определить, меньше ли одна строка или равна другой.
В Оценивается в true, если любое из значений для оценки имеет тот же тип данных и точно совпадает со значением столбца.
НЕ Возвращает значение true, если какое-либо из значений оценки отличается по типу данных или не является точным совпадением со значением столбца.
И Объединяет предыдущую инструкцию и следующую инструкцию с помощью логического И операции. Оба утверждения должны быть истинными, чтобы весь предикат был истинным.
ИЛИ Объединяет предыдущий оператор и следующий оператор с помощью логической операции ИЛИ. Одно из утверждений должно быть истинным, чтобы весь предикат считался истинным.
ПРАВДА Логическое выражение для истины.
ЛОЖЬ Логическое выражение для false.
ПУСТОЙ Пустой тип данных, который можно использовать с оператором IS. Например, row IS BLANK.
Отсутствует Тип данных NULL, который можно использовать с оператором IS. Например, row IS NULL.

Объедините безопасность на уровне строк и на уровне столбцов

Безопасность на уровне строк и на уровне столбцов можно использовать вместе для ограничения доступа пользователей к таблице. Однако обе политики должны применяться с использованием единой роли безопасности OneLake. В этом сценарии доступ к данным ограничен в соответствии с правилами, заданными в одной роли.

Безопасность OneLake не поддерживает сочетание двух или нескольких ролей, в которых один содержит правила RLS, а другой — правила CLS. Пользователи, пытающиеся получить доступ к таблицам, которые являются частью неподдерживаемой комбинации ролей, получают ошибки запроса.