Fabric データ ウェアハウスでの動的データ マスキング

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

動的データ マスキングでは、特権のないユーザーに対して機密データをマスキングすることでデータの公開を制限します。 DDM を使用すると、アプリケーションのセキュリティの設計とコーディングを大幅に簡略化することができます。

動的データ マスクでは、公開する機密データの量を管理者が指定できるため、そのようなデータに対する未承認の閲覧を防ぎ、アプリケーション レイヤーへの影響が最小限に抑えられます。 動的データ マスクは、指定されたデータベース フィールドで、クエリの結果セットに含まれる機密データを隠蔽するように構成できます。 動的データ マスクでは、データベース内のデータは変更されず、マスク ルールはクエリ結果に適用されるため、既存のアプリケーションで使用できます。 多くのアプリケーションは、既存のクエリを変更せずに、デリケートなデータをマスクすることができます。

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

動的データ マスクの目的は、アクセスすべきではないユーザーがデータを閲覧することを防ぎ、機密データの公開を制限することにあります。 動的データ マスクは、ユーザーが直接データベースに接続し、徹底的なクエリを実行して、機密データの漏えいを防ぐことを目的とはしていません。

動的データ マスクは、列レベルのセキュリティ行レベルのセキュリティといった他の Fabric セキュリティ機能を補完します。 データベース内の機密データを保護するために、これらのデータ保護機能を一緒に使用することを強くお勧めします。

動的データ マスクを定義する

マスク ルールは、列のデータを難読化するために、テーブル内の列で定義することができます。 使用できるマスクには 4 つの種類があります。

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

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

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

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

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

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

ALTER 構文例: ALTER COLUMN Email ADD MASKED WITH (FUNCTION = 'email()')
Random ランダム マスク関数は任意の数字型に使用でき、指定した範囲内で生成したランダムな値でオリジナルの値をマスクします。 定義の構文例: 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 に変わります。

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

アクセス許可

ワークスペースの管理者、メンバー、または共同作成者の権限がなく、Warehouse に対する昇格された権限のないユーザーには、マスクされたデータが表示されます。

動的データ マスクを適用してテーブルを作成するのに特別なアクセス許可は必要ありません。必要なのは、スキーマ アクセス許可に対する標準的な CREATE TABLEALTER のみです。

列のマスクを追加、置換、削除するには、テーブルに対する ALTER ANY MASK アクセス許可と ALTER アクセス許可が必要です。 セキュリティ責任者には、ALTER ANY MASK を付与するのが適切です。

テーブルに対して SELECT アクセス許可を持つユーザーは、テーブル データを閲覧できます。 マスク済みとして定義されている列には、マスクされたデータが表示されます。 UNMASK アクセス許可を付与されたユーザーは、マスクが定義された列から、マスクを解除したデータを取得できます。

データベースに対する CONTROL アクセス許可には、ユーザーがマスクされていないデータを表示することを可能にする ALTER ANY MASKUNMASK の両方のアクセス許可が含まれます。 管理者、メンバー、共同作成者などの管理ユーザーまたはロールには、仕様としてデータベースに対する CONTROL アクセス許可が与えられており、マスクされていないデータを既定で表示できます。 Warehouse に対する昇格されたアクセス許可には、CONTROL アクセス許可が含まれます。

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

動的データ マスクは、アプリケーションに使用される事前定義されたクエリ セットのデータ公開を制限することで、アプリケーション開発を簡素化するために設計されています。 動的データ マスクは、データに直接アクセスするときに機密データが誤って公開されることを防ぐためにも有効ですが、クエリ アクセス許可を持つ特権のないユーザーが、実際のデータに対するアクセス権を得る手法を適用する可能性にも注意する必要があります。

たとえば、Warehouse に対してクエリを実行する十分な特権を持つユーザーが、基になるデータを "推測" し、最終的には実際の値を推測しようと試みているとします。 管理者は [Employee].[Salary] 列に対してマスクを定義しましたが、このユーザーはデータベースに直接接続し、値を推測した結果、[Salary] テーブルの Employees を推論したと仮定します。

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

結果は次のようになります。

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

これは、ウェアハウスまたは SQL 分析エンドポイントに対するクエリ アクセス権を持つユーザーから機密データをセキュリティで完全に保護するために、動的データ マスクを単独で使用しないようにする必要があることを示しています。 動的データ マスクは機密データの公開を防ぐ場合に適していますが、基になるデータを推測する悪意のある攻撃を防ぐものではありません。

SQL の詳細なアクセス許可を使用してオブジェクト レベルのセキュリティを適切に管理し、必要最小限のアクセス許可の原則に常に従うことが重要です。

次のステップ