Fabric Data Warehouse での動的データ マスク

適用対象:✅ Microsoft Fabric の SQL 分析エンドポイントおよびウェアハウス

動的データ マスクは、特権のないユーザーにマスクすることで機密データの公開を制限するデータ保護機能です。 これにより、アプリケーションのセキュリティの設計とコーディングが簡素化されます。

動的データ マスクは、機密データの不正な表示を防ぐのに役立ちます。 管理者は、表示する機密データの量を指定します。アプリケーション 層への影響は最小限です。 指定されたデータベース フィールドに動的データ マスクを構成して、クエリの結果セット内の機密データを非表示にすることができます。 データベース内のデータは変更されないため、マスク ルールがクエリ結果に適用されるため、既存のアプリケーションは変更なしで引き続き動作できます。 多くのアプリケーションは、既存のクエリを変更せずに、デリケートなデータをマスクすることができます。

動的データ マスクには、次の機能があります。

  • 中央のデータ マスク ポリシーは、データベースの機密フィールドに対して直接動作します。
  • 特権ユーザーまたはロールは、機密データにアクセスするように指定できます。
  • 完全マスク関数と部分マスク関数、数値データ用のランダム マスクから選択できるマスク オプションがあります。
  • 単純な Transact-SQL コマンドで、マスクを定義し、管理します。

動的データ マスクでは、データベース ユーザーがデータベースに直接接続したり、機密データの一部を公開する包括的なクエリを実行したりすることはできません。 列レベルのセキュリティや行レベルのセキュリティなどの他のFabricセキュリティ機能と共に動的データ マスクを使用して、データベース内の機密データを保護します。

動的データ マスク関数

テーブル内の列にマスク ルールを定義して、その列のデータを難読化します。 4種類のマスクが用意されています。

関数 説明
既定値 指定のフィールドのデータ型に応じたフル マスク。

文字列データ型 (XXXXncharvarcharnvarchartextntext) のフィールドのサイズが 4 文字未満の場合は、 (またはそれ未満) を使用します。

数値データ型 (bigintbitdecimalintmoneynumericsmallintsmallmoneytinyintfloatreal) の場合は値 0 を使用します。

日付/時刻データ型 (1900-01-01 00:00:00.0000000datetime2datetimedatetimeoffsetsmalldatetimetime) の場合は、 を使います。

バイナリ データ型 (binaryvarbinaryimage) の場合は、ASCII 値 0 のシングル バイトを使用します。
列定義の構文例: Phone# varchar(12) MASKED WITH (FUNCTION = 'default()') NULL

ALTER 構文の例: ALTER COLUMN Gender ADD MASKED WITH (FUNCTION = 'default()')
Email メール アドレスの最初の 1 文字と定数サフィックスの ".com" をメール アドレスのフォームで公開するマスク方法。 aXXX@XXXX.com. 定義の構文例: Email varchar(100) MASKED WITH (FUNCTION = 'email()') NULL

ALTER 構文例: ALTER COLUMN Email ADD MASKED WITH (FUNCTION = 'email()')
ランダム ランダム マスク関数は任意の数字型に使用でき、指定した範囲内で生成したランダムな値でオリジナルの値をマスクします。 定義の構文例: Account_Number bigint MASKED WITH (FUNCTION = 'random([start range], [end range])')

ALTER 構文の例: ALTER COLUMN [Month] ADD MASKED WITH (FUNCTION = 'random(1, 12)')
カスタム文字列 間にカスタム埋め込み文字列を追加し、最初と最後の文字を公開するマスク方法。 prefix,[padding],suffix

元の文字列が全体をマスクするには短すぎる場合、プレフィックスまたはサフィックスの一部は公開されません。
定義の構文例: FirstName varchar(100) MASKED WITH (FUNCTION = 'partial(prefix,[padding],suffix)') NULL

ALTER 構文の例: ALTER COLUMN [Phone Number] ADD MASKED WITH (FUNCTION = 'partial(1,"XXXXXXX",0)')

これにより、555.123.1234 のような電話番号が 5XXXXXXX に変わります。

その他の例:

ALTER COLUMN [Phone Number] ADD MASKED WITH (FUNCTION = 'partial(5,"XXXXXXX",0)')

これにより、555.123.1234 のような電話番号が 555.1XXXXXXX に変わります。

詳細については、「Fabric Data Warehouse に動的データ マスクを実装する方法」を参照してください。

動的データ マスキングのアクセス許可

Fabric Data Warehouseでは、ユーザーがワークスペースの管理者、メンバー、または共同作成者ロールのメンバーでない場合、または Warehouse に対する昇格されたアクセス許可がない場合に、マスクされた列に対してクエリを実行すると、マスクされたデータが表示されます。

次の表に、各動的データ マスク操作に必要なアクセス許可を示します。

Operation 必要な権限
マスクされた列を含むテーブルを作成する CREATE TABLEALTERがスキーマ上にあります
列のマスクを追加、置換、または削除する テーブルの上のALTER ANY MASKALTER
マスクされたデータを表示する SELECT テーブルの上
マスクされていないデータを表示する 列のUNMASKまたはデータベースのCONTROL

セキュリティ担当者に ALTER ANY MASK を付与します。 マスクされた列からマスクされていないデータを取得できるように、ユーザーに UNMASK を付与します。

データベースに対する CONTROL 権限には ALTER ANY MASKUNMASKの両方が含まれているため、 CONTROL を持つユーザーはマスクされていないデータを表示できます。 管理者、メンバー、共同作成者などの管理者ユーザーまたはロールには、データベースに対する CONTROL 権限が設計上付与されており、既定ではマスクされていないデータを表示できます。 Warehouse に対する昇格されたアクセス許可には、CONTROL アクセス許可が含まれます。

セキュリティに関する考慮事項: 推論またはブルート フォース手法を使用したマスクのバイパス

動的データ マスクを使用すると、アプリケーションで使用される一連の定義済みクエリでデータの公開を制限することで、アプリケーションの開発が簡素化されます。 動的データ マスクは、データに直接アクセスするときに機密データが誤って公開されるのを防ぐのにも役立ちますが、クエリアクセス許可を持つ特権のないユーザーは、手法を使用して実際のデータを推測できます。

たとえば、ウェアハウスでクエリを実行するアクセス許可を持つユーザーは、マスクされたデータを推測するために値を推測できます。 [Employee].[Salary]列にマスクを定義するとします。 ユーザーはデータベースに直接接続し、値の推測を開始し、最終的に[Salary] テーブルのEmployees値を推論します。 Employees テーブルに対して範囲クエリを実行します。

SELECT ID, Name, Salary FROM Employees
WHERE Salary > 99999 and Salary < 100001;

クエリは次を返します。

ID 名前 給与
62543 Jane Doe 0
91245 John Smith 0

Salary列がマスクされている場合でも (値は0として表示されます)、WHERE句は、両方の従業員の給与が $99,999 から $100,001 の間にあることを確認します。 動的データ マスクのみを使用して、Warehouse または SQL 分析エンドポイントへのクエリ アクセスを持つユーザーからの機密データを完全にセキュリティで保護しないでください。 動的データ マスクは、偶発的な機密データの漏えいを防ぐのに適していますが、基になるデータを推測する悪意のある意図から保護されません。

SQL の詳細なアクセス許可を使用してオブジェクト レベルのセキュリティを適切に管理し、常に最小特権の原則に従います。

次のステップ