Sicherheitssyntaxreferenz auf Zeilenebene

Dieser Artikel dokumentiert die Syntax zur Definition von Zeilenebenen-Sicherheitsregeln (RLS) in OneLake-Sicherheit. Um eine RLS-Regel auf eine Tabelle anzuwenden, siehe Create and manage OneLake Security Roles.

RLS-Regeln verwenden SQL-Syntax, um die Zeilen zu definieren, die ein Benutzer sehen kann. Die Syntax nimmt die Form einer SQL-Anweisung SELECT mit den in der Klausel WHERE definierten RLS-Regeln an. RLS-Regeln unterstützen nur die in diesem Artikel definierte Teilmenge von SQL. Abfragen mit ungültiger RLS-Syntax oder RLS-Syntax, die nicht mit der zugrundeliegenden Tabelle übereinstimmt, führen dazu, dass den Nutzern keine Zeilen angezeigt werden oder Fehler im SQL-Analytics-Endpunkt abgefragt werden.

Wenn du RLS-Ausdrücke schreibst, behalte folgende Best Practices im Hinterkopf:

  • Vermeiden Sie vage oder übermäßig komplexe RLS-Ausdrücke.
  • Stark typisierte Ausdrücke mit ganzzahligen oder String-Lookups, die "=" verwenden, sind am sichersten und am leichtesten verständlich.
  • Verwenden Sie ganzzahlige Spalten zum Sortieren und Operationen mit größeren oder kleineren Zahlen.
  • Vermeide String-Äquivalenzen, wenn du das Format der Eingabedaten nicht kennst, besonders bei Unicode-Zeichen oder Akzentsensitivität.

Die Sicherheit auf Zeilenebene bewertet String-Daten als farbusinsensitiv, indem folgende Sortierung und Vergleiche verwendet wird: Latin1_General_100_CI_AS_KS_WS_SC_UTF8.

Syntax

Die maximale Anzahl von Zeichen in einer Regeln für Sicherheit auf Zeilenebene beträgt 1.000.

Alle Regeln für Sicherheit auf Zeilenebene haben die folgende Form:

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

Beispiel:

SELECT * FROM Sales WHERE Amount > 50000 AND State='CA'
Platzhalter Description
{schema_name} Der Name des Schemas, das {table_name} enthält. Wenn das Element Schemata unterstützt, musst du {schema_name} angeben.
{table_name} Der Name der Tabelle, auf die das RLS-Prädikat angewendet wird. Dieser Wert muss exakt mit dem Namen der Tabelle übereinstimmen, sonst zeigt das RLS keine Zeilen an. Verwenden Sie eckige Klammern, [] um Tabellennamen mit Sonderzeichen zu entkommen. Beispiel: SELECT * FROM [dbo].[Secret.Table]
{column_level_boolean} Eine boolesche Anweisung, die folgende Komponenten enthält:

* Spaltenname: Der Name einer Spalte in {table_name}, wie sie im Delta-Log-Schema erscheint. Sie können Spaltennamen entweder als {column_name} oder {table_name} formatieren. {column_name}.
* Operator: Einer der unterstützten Operatoren , der den Spaltennamen und -wert zu einem booleschen Wert auswertet.
* Wert: Ein statischer Wert oder eine Menge von Werten, gegen die man bewertet werden kann.

Sie können eine oder mehrere durch AND oder OR getrennte boolesche Anweisungen verwenden.

Unterstützte Operatoren

Sicherheitsregeln auf Zeilenebene unterstützen folgende Operatoren und Schlüsselwörter:

Bediener Description
= (entspricht) Wird mit TRUE ausgewertet, wenn die beiden Werte denselben Datentyp aufweisen und genau übereinstimmen.
<> (ungleich) Wird als wahr ausgewertet, wenn die beiden Werte nicht denselben Datentyp haben und nicht exakt übereinstimmen.
> (größer als) Wird mit TRUE ausgewertet, wenn der Spaltenwert größer als der Auswertungswert ist. Bei Zeichenfolgenwerten verwendet dieser Operator einen bitweisen Vergleich, um festzustellen, ob eine Zeichenfolge größer als die andere ist.
>= (größer oder gleich) Wird mit TRUE ausgewertet, wenn der Spaltenwert größer oder gleich dem Auswertungswert ist. Bei Zeichenfolgenwerten verwendet dieser Operator einen bitweisen Vergleich, um festzustellen, ob eine Zeichenfolge größer oder gleich der anderen ist.
< (kleiner als) Wird mit TRUE ausgewertet, wenn der Spaltenwert kleiner als der Auswertungswert ist. Bei Zeichenfolgenwerten verwendet dieser Operator einen bitweisen Vergleich, um festzustellen, ob eine Zeichenfolge kleiner als die andere ist.
<= (kleiner oder gleich) Wird mit TRUE ausgewertet, wenn der Spaltenwert kleiner oder gleich dem Auswertungswert ist. Bei Zeichenfolgenwerten verwendet dieser Operator einen bitweisen Vergleich, um festzustellen, ob eine Zeichenfolge kleiner oder gleich der anderen ist.
IN Wird mit TRUE ausgewertet, wenn einer der Auswertungswerte denselben Datentyp aufweist und genau dem Spaltenwert entspricht.
NOT Wird mit TRUE ausgewertet, wenn einer der Auswertungswerte nicht denselben Datentyp aufweist oder dem Spaltenwert nicht genau entspricht.
AND Kombiniert die vorherige Anweisung und die nachfolgende Anweisung mithilfe einer booleschen AND-Operation. Beide Aussagen müssen wahr sein, damit die gesamte Bedingung wahr ist.
OR Kombiniert die vorherige Anweisung und die nachfolgende Anweisung mithilfe einer booleschen ODER-Operation. Eine der Aussagen muss wahr sein, damit das ganze Prädikat wahr ist.
TRUE Der boolesche Ausdruck für TRUE.
FALSE Der boolesche Ausdruck für FALSE.
BLANK Der leere Datentyp, den du mit dem IS-Operator verwenden kannst. Beispiel: row IS BLANK
NULL Der Null-Datentyp, den du mit dem IS-Operator verwenden kannst. Beispiel: row IS NULL