次の方法で共有


OneLake の行レベル セキュリティ (プレビュー)

行レベル セキュリティ (RLS) は、OneLake に格納されている表形式データの行レベルのデータ制限を定義できる OneLake セキュリティ (プレビュー) の機能です。 ユーザーは、OneLake でそのロールのメンバーのデータ行をフィルター処理するための規則を含むロールを定義できます。 RLS ロールのメンバーがそのデータのクエリを実行すると、RLS 規則が評価され、許可された行のみが返されます。

OneLake セキュリティは現在、限定プレビュー段階です。 プレビューへの参加を要求してこれらの機能にアクセスするには、 https://aka.ms/onelakesecuritypreviewのフォームに入力します。

[前提条件]

行レベルのセキュリティを適用する

OneLake セキュリティ RLS は、次の 2 つの方法のいずれかで適用されます。

  • Fabric エンジンでフィルター処理されたテーブル: Spark ノートブックなど、サポートされている Fabric エンジンの一覧に対してクエリを実行すると、RLS 規則に従って表示を許可された行のみが表示されます。
  • テーブルへのアクセスのブロック: RLS 規則が適用されたテーブルは、サポートされている Fabric エンジンの外部では読み取れません。

フィルター処理されたテーブルの場合、次の動作が適用されます。

  • RLS 規則では、管理者、メンバー、共同作成者の各ロールのユーザーのアクセスは制限されません。
  • RLS 規則に、定義されているテーブルとの不一致が含まれる場合、クエリは失敗し、行は返されません。 たとえば、RLS 規則が、テーブルの一部に属さない列を参照している場合です。
  • RLS テーブルのクエリは、ユーザーが 2 つの異なるロールに属し、それらのロールの 1 つが列レベル セキュリティ (CLS) を持っている場合、エラーが発生して失敗します。
  • RLS 規則は、デルタ Parquet テーブルであるオブジェクトにのみ適用できます。
    • 代わりに、Delta 以外のテーブル オブジェクトに適用される RLS 規則は、ロールのメンバーのテーブル全体へのアクセスをブロックします。
  • RLS ステートメントに評価できない構文エラーが含まれている場合、テーブルへのアクセスがブロックされる可能性があります。

行レベル セキュリティ規則を定義する

行レベル セキュリティ規則は、Delta Parquet 形式のテーブル データへのアクセスを許可する OneLake セキュリティ ロールの一部として定義できます。 行は表形式データにのみ関連する概念であるため、テーブル以外のフォルダーや非構造化データに対して RLS 定義を使用することはできません。

RLS 規則では、SQL 構文を使用して、ユーザーに表示できる行を指定します。 この構文は、SELECT 句内で定義された RLS 規則を持つ SQL WHERE ステートメントの形式をとります。 RLS 規則は、「構文規則」で定義された SQL 言語のサブセットのみをサポートします。 基になるテーブルと一致しない RLS 構文または RLS 構文が無効なクエリでは、ユーザーに行は表示されず、SQL 分析エンドポイントでクエリ エラーが発生します。

ベスト プラクティスとして、あいまいまたは過度に複雑な RLS 式を使用しないようにします。 "=" を使用した整数または文字列参照を使用した厳密に型指定された式は、最も安全でわかりやすいものになります。

RLS 規則を定義するには、次の手順に従います。

  1. Lakehouse に移動し、[ OneLake セキュリティの管理 (プレビュー)] を選択します。

  2. テーブルまたはフォルダーのセキュリティを定義する既存のロールを選択するか、[新規] を選択して新しいロールを作成します。

  3. ロールの詳細ページで、RLS を定義するテーブルの横にある他のオプション ([...]) を選択し、[Row security (preview)]\(行セキュリティ (プレビュー)\) を選択します。

    テーブルのアクセス許可を編集するための [行セキュリティ] の選択を示すスクリーンショット。

  4. コード エディターでユーザーに表示する行を定義するための SQL ステートメントを入力します。 ガイダンスについては、「構文規則」セクションを参照してください。

  5. [保存] を選択して、行セキュリティ規則を確認します。

SQL 分析エンドポイントの OneLake セキュリティを有効にする

SQL 分析エンドポイントで OneLake セキュリティを使用するには、その ユーザーの ID モードを有効にする必要があります。 新しく作成された SQL 分析エンドポイントは既定でユーザーの ID モードになるため、既存の SQL 分析エンドポイントでは次の手順に従う必要があります。

ユーザーの ID モードに切り替える必要があるのは、SQL 分析エンドポイントごとに 1 回だけです。 ユーザーの ID モードに切り替えされていないエンドポイントは、引き続き委任された ID を使用してアクセス許可を評価します。

  1. SQL 分析エンドポイントに移動します。

  2. SQL 分析エンドポイント エクスペリエンスで、上部のリボンにある [ セキュリティ ] タブを選択します。

  3. OneLake アクセス モードでユーザーの ID を選択します。

    SQL 分析エンドポイントに対して OneLake セキュリティを有効にする [ユーザー ID] を選択するスクリーンショット。

  4. プロンプトで[はい]を選択 し、ユーザーの ID を使用します。

    テーブル読み取りアクセスに対して 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} の列の名前。 列名は、{column_name} または {table_name}.{column_name} のいずれかとして書式設定できます。
* 演算子: 列名と値をブール値に評価するサポートされた演算子のいずれか。
* 値: 評価対象の静的な値または値のセット。

AND または OR で区切られた 1 つ以上のブール値ステートメントを使用できます。

サポートされている演算子

行レベル セキュリティ規則では、次の演算子とキーワードの一覧がサポートされます。

オペレーター 説明
= (等しい) 2 つの値が同じデータ型であり、完全一致の場合は、true に評価されます。
<> (等しくない) 2 つの値が同じデータ型でなく、完全一致でない場合は、true に評価されます。
> (より大きい) 列の値が評価値より大きい場合は、true に評価されます。 文字列値の場合、この演算子はビット単位の比較を使用して、一方の文字列がもう一方の文字列より大きいかどうかを判断します。
>= (以上) 列の値が評価値以上の場合は、true に評価されます。 文字列値の場合、この演算子はビット単位の比較を使用して、一方の文字列がもう一方の文字列以上かどうかを判断します。
< (より小さい) 列の値が評価値より小さい場合は、true に評価されます。 文字列値の場合、この演算子はビット単位の比較を使用して、一方の文字列がもう一方の文字列より小さいかどうかを判断します。
<= (以下) 列の値が評価値以下の場合は、true に評価されます。 文字列値の場合、この演算子はビット単位の比較を使用して、一方の文字列がもう一方の文字列以下かどうかを判断します。
評価値のいずれかが同じデータ型であり、列の値と完全一致である場合は、true に評価されます。
いいえ 評価値のいずれかが同じデータ型でない場合、または列値と完全一致でない場合は、true に評価されます。
そして ブール値 AND 演算を使用して、前のステートメントと後続のステートメントを結合します。 述語全体が true であるには、両方のステートメントが true である必要があります。
または ブール値 OR 演算を使用して、前のステートメントと後続のステートメントを結合します。 述語全体が true であるには、ステートメントの一方が true である必要があります。
真実 true のブール式。
false のブール式。
空白 IS 演算子と一緒に使用できる空のデータ型。 たとえば、row IS BLANK のようにします。
ヌル IS 演算子と一緒に使用できる null データ型。 たとえば、row IS NULL のようにします。

行レベル セキュリティと列レベル セキュリティを組み合わせる

行レベル セキュリティと列レベル セキュリティを一緒に使用して、テーブルへのユーザー アクセスを制限できます。 ただし、2 つのポリシーは、単一の OneLake セキュリティ ロールを使用して適用する必要があります。 このシナリオでは、1 つのロールで設定されている規則に従って、データへのアクセスが制限されます。

OneLake セキュリティでは、1 つに RLS 規則が含まれ、もう 1 つに CLS 規則が含まれる 2 つ以上のロールの組み合わせはサポートされません。 サポートされていないロールの組み合わせの一部であるテーブルにアクセスしようとするユーザーは、クエリ エラーを受け取ります。