Ссылка на синтаксис безопасности на уровне строк

В этой статье документируется синтаксис определения правил безопасности на уровне строк (RLS ) в безопасности OneLake. Чтобы применить правило RLS к таблице, см. Создание и управление ролями безопасности OneLake.

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

При написании выражений RLS учитывайте следующие лучшие практики:

  • Избегайте расплывчатых или чрезмерно сложных выражений RLS.
  • Сильно типизированные выражения с целочисленными или строковыми поисками, использующими «=», являются самыми безопасными и простыми для понимания.
  • Используйте целочисленные столбцы для сортировки и операций «больше или меньше».
  • Избегайте эквивалентов строк, если не знаете формат входных данных, особенно для символов Unicode или чувствительности к акцентам.

Безопасность на уровне строк оценивает строковые данные как нечувствительные к регистру, используя следующую сортировку для сортировки и сравнений: Latin1_General_100_CI_AS_KS_WS_SC_UTF8.

Syntax

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

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

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'
Заполнитель Описание
{schema_name} Название схемы, содержащей {table_name}. Если элемент поддерживает схемы, необходимо включить {schema_name}.
{table_name} Название таблицы, к которой относится предикат RLS. Это значение должно точно совпадать с названием таблицы, иначе RLS не показывает строк. Используйте квадратные [] скобки, чтобы избежать названий таблиц со специальными символами. Например: SELECT * FROM [dbo].[Secret.Table].
{column_level_boolean} Логическое утверждение, содержащее следующие компоненты:

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

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

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

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

Operator Описание
= (равно) Возвращает значение true, если оба значения имеют один и тот же тип данных и являются точными совпадениями.
<> (не равно); Вычисляется как true, если два значения имеют разные типы данных и не являются точными совпадениями.
> (больше чем) Возвращает значение true, если значение столбца больше значения оценки. Для строковых значений этот оператор использует побитовое сравнение, чтобы определить, больше ли одна строка, чем другая.
>= (больше или равно) Возвращает true, если значение столбца больше или равно значению сравнения. Для строковых значений этот оператор использует побитовое сравнение, чтобы определить, больше ли одна строка или равна другой.
< (меньше) Равно истине, если значение в столбце меньше оцениваемого значения. Для строковых значений этот оператор использует побитовое сравнение, чтобы определить, меньше ли одна строка, чем другая строка.
<= (меньше или равно) Принимает значение true, если значение столбца меньше или равно значению для сравнения. Для строковых значений этот оператор использует побитовое сравнение, чтобы определить, меньше ли одна строка или равна другой.
IN Оценивается в true, если любое из значений для оценки имеет тот же тип данных и точно совпадает со значением столбца.
NOT Возвращает значение true, если какое-либо из значений оценки отличается по типу данных или не является точным совпадением со значением столбца.
AND Объединяет предыдущий и последующий оператор с помощью булевой операции AND. Оба утверждения должны быть истинными, чтобы весь предикат был истинным.
OR Объединяет предыдущий и последующий оператор с помощью булевой операции OR. Одно из утверждений должно быть истинным, чтобы весь предикат считался истинным.
TRUE Логическое выражение для истины.
FALSE Логическое выражение для false.
BLANK Пустой тип данных, который можно использовать с оператором IS. Например: row IS BLANK.
NULL Тип нулевых данных, который можно использовать с оператором IS. Например: row IS NULL.