OneLakeにおけるテーブル、カラム、行レベルのセキュリティ

OneLakeのセキュリティロールは、Fabricアイテムのデータにアクセスできる人物を制御します。 時には、アイテム全体へのアクセスを許可したり拒否したりするのはあまりにも粗雑すぎることがあります。 機密の列を隠したり、ユーザーがどの行を見るか制限したり、特定のテーブルだけを公開したりする必要があるかもしれません。 役割内では、アクセスを3つの細かいレベルで細かく調整できます:テーブルやフォルダのオブジェクトレベルのセキュリティ、個々のカラムのカラムレベルのセキュリティ(CLS)、個々の行の行レベルのセキュリティ(RLS)。

この記事では、各管理が何をするのか、そしてOneLakeがどのようにそれを強制しているかを説明します。 これらのコントロールを作成するには、「 OneLakeセキュリティロールの作成および管理」をご覧ください。

OneLakeのセキュリティロールは、データへのアクセスを提供するために助成金モデルを使用しています。 異なるロールや許可モデルで許可されたアクセスを拒否することはできません。 そのため、これらのコントロールはワークスペースレベルで管理者、メンバー、貢献者の役割のユーザーのアクセスを制限しません。

テーブルおよびフォルダーのセキュリティ

テーブルレベルおよびフォルダレベルのセキュリティは、オブジェクトレベルのセキュリティ(OLS)とも呼ばれ、データ項目内の特定のテーブルやフォルダへのアクセスを許可することを可能にします。 OLSでは、構造化データと非構造化データの両方に対してフォルダレベルで権限を作成します。 OneLakeのDelta Parquetテーブルはフォルダとして表現されているため、テーブルもフォルダと同じ方法で保護できます。 スキーマもフォルダなので、同じ方法で保護できます。

列レベルおよび行レベルのセキュリティ

OneLakeのセキュリティは、カラムレベルおよび行レベルのセキュリティを2つの方法のいずれかで強制します。

  • フィルター表:SparkノートブックのようなFabricエンジンや認可されたサードパーティエンジンを使ってテーブルを照会するユーザーは、CLSやRLSルールで許可されている列や行のみを認識します。
  • ブロックテーブル: 不正なサードパーティエンジンを使ってテーブルをクエリしたユーザーは、そのテーブルを読むことができません。

OneLakeのセキュリティは、Delta Parquetテーブルや 仮想化Icebergテーブルに対してCLSおよびRLSルールを強制できます。 他のテーブルタイプに適用されるルールは、その役割のメンバーがテーブル全体にアクセスすることをブロックします。

CLSやRLSのルールが定義されたテーブルと不一致すると、クエリは失敗し、データを返しません。 例えば、ルールがテーブルに含まれていない列を参照している場合、ミスマッチが生じます。

列レベルのセキュリティ

カラムレベルのセキュリティ(CLS)は、テーブル全体ではなく、テーブル内の選択された列へのアクセスを許可します。 許可リストから削除したカラムのデータはユーザーには見えません。

CLSでフィルタリングされたテーブルでは、以下の動作が適用されます:

  • ユーザーが一部の列しかアクセスできないテーブルでselect *クエリを実行する場合、CLSルールはFabricエンジンによって異なる挙動を示します。
    • Sparkノートブック:クエリは成功し、許可された列のみを表示します。
    • SQL分析エンドポイント:クエリはエラーを返し、ユーザーがアクセスできない列へのアクセスをブロックします。
    • セマンティックモデル:クエリはエラーを返し、ユーザーがアクセスできない列へのアクセスをブロックします。
  • 特定の体験ではセキュアカラムの名前が見えることがありますが、データ値は決して表示されません。

行レベルのセキュリティ

行レベルセキュリティ(RLS)は、OneLakeに保存された表形式データに対して行レベルのデータ制限を定義します。 ロールのメンバー向けにデータ行をフィルタリングするルールを含むロールを定義します。 RLSロールのメンバーがデータをクエリすると、OneLakeはRLSルールを評価し、許可された行のみを返します。 行は表形式のデータにのみ関係する概念なので、非テーブルフォルダや非構造化データに対してRLSを定義することはできません。

RLSでフィルタリングされたテーブルでは、以下の動作が適用されます:

  • RLS ステートメントに評価できない構文エラーが含まれている場合、テーブルへのアクセスがブロックされる可能性があります。

RLSルールの作成に使用された構文については、 Row-level security syntax referenceを参照してください。

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

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

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