本記事では、OneLakeセキュリティにおける 行レベルセキュリティ(RLS) ルールの定義に関する構文を記述しています。 テーブルにRLSルールを適用するには、「 OneLakeセキュリティロールの作成および管理」をご覧ください。
RLS 規則では、SQL 構文を使用して、ユーザーに表示できる行を指定します。 構文はWHERE節で定義されたRLSルールを含むSQL SELECT文の形をとります。 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'
| プレースホルダー | Description |
|---|---|
| {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}。 * 演算子:カラム名と値をブール値に評価する サポート演算 子の一つです。 * 価値:評価対象となる静的な値または値の集合。 AND または OR で区切られた 1 つ以上のブール値ステートメントを使用できます。 |
サポートされている演算子
行レベルのセキュリティルールは、以下のオペレーターとキーワードをサポートします:
| Operator | Description |
|---|---|
= (等しい) |
2 つの値が同じデータ型であり、完全一致の場合は、true に評価されます。 |
<> (等しくない) |
2 つの値が同じデータ型でなく、完全一致でない場合は、true に評価されます。 |
> (より大きい) |
列の値が評価値より大きい場合は、true に評価されます。 文字列値の場合、この演算子はビット単位の比較を使用して、一方の文字列がもう一方の文字列より大きいかどうかを判断します。 |
>= (以上または等しい) |
列の値が評価値以上の場合は、true に評価されます。 文字列値の場合、この演算子はビット単位の比較を使用して、一方の文字列がもう一方の文字列以上かどうかを判断します。 |
< (より小さい) |
列の値が評価値より小さい場合は、true に評価されます。 文字列値の場合、この演算子はビット単位の比較を使用して、一方の文字列がもう一方の文字列より小さいかどうかを判断します。 |
<= (より小か等しい) |
列の値が評価値以下の場合は、true に評価されます。 文字列値の場合、この演算子はビット単位の比較を使用して、一方の文字列がもう一方の文字列以下かどうかを判断します。 |
IN |
評価値のいずれかが同じデータ型であり、列の値と完全一致である場合は、true に評価されます。 |
NOT |
評価値のいずれかが同じデータ型でない場合、または列値と完全一致でない場合は、true に評価されます。 |
AND |
前の文と後の文をブールAND演算を用いて結合します。 述語全体が true であるには、両方のステートメントが true である必要があります。 |
OR |
前の文とその後の文をブールOR演算で組み合わせます。 述語全体が true であるには、ステートメントの一方が true である必要があります。 |
TRUE |
『true』に関するブール式。 |
FALSE |
「false」を表すブール式。 |
BLANK |
これはIS演算子で使える空のデータ型です。 たとえば、「 row IS BLANK 」のように入力します。 |
NULL |
IS演算子で使えるnullデータ型です。 たとえば、「 row IS NULL 」のように入力します。 |