動的データ マスクを実装する

完了

動的データ マスクは、露出を制限するためにデータを難読化することによって機能します。 機密データを見る必要がないユーザーは、データを含む列を表示することはできますが、実際のデータ自体は表示できません。 動的データ マスクはプレゼンテーション レイヤーで機能し、高い特権を持つユーザーはマスクされていないデータを常に表示できることに注意してください。

動的データ マスクには、アプリケーションやデータベースを大きく変更する必要がないという利点があります。 次に示すように、Azure portal または T-SQL を使って構成できます。

Screenshot of the dynamic data masking T-SQL commands.

上の例では、PhoneNumber 列と EmailAddress 列の両方が、テーブルに対する SELECT アクセス許可しか持たない DDMDemo ユーザーには表示されません。 電話番号は、列の最後の 4 桁を除くすべての数字を置き換える partial 関数を使ってマスクされているため、ユーザーは最後の 4 桁のみを見ることができます。 このマスクはカスタム関数と見なされます。 T-SQL に加えて、Azure SQL Database を使用している場合は、Azure portal 内で動的マスク ルールを作成できます。

Screenshot of how to add masking rule in Azure portal.

画面にアクセスしてマスク ルールを追加するには、Azure portal でデータベースに移動し、データベースのメイン ブレードの [セキュリティ] セクションで [動的データ マスク] を選びます。

動的データ マスクでは、次のマスク パターンがサポートされていて使用できます。

マスク関数 定義 T-SQL の例
[Default] 値のどの部分もユーザーに公開されないように、列のデータをマスクします。 ユーザーには、文字列値が XXXX、数値が 0、日付値が 01.01.1900 として表示されます。 ALTER TABLE [Customer] ALTER COLUMN Address ADD MASKED WITH (FUNCTION = 'default()')
クレジット カード 最後の 4 文字を除くすべてがマスクされ、ユーザーには最後の 4 桁の数字が表示されます。 このマスクは、クレジット カード番号の最後の 4 桁を表示する必要があるが、数字全体を参照する必要はない顧客サービス エージェントに役立ちます。 データは、通常のクレジット カード番号形式 (XXXX-XXXX-XXXX-1234) で表示されます。 ALTER TABLE [Customer] ALTER COLUMN Address ADD MASKED WITH (FUNCTION = 'partial(0,"XXXX-XXXX-XXXX-",4)')
電子メール 最初の文字と末尾のドメイン サフィックスのみがマスクされません (例: "aXXX@XXXXXXX.com") ALTER TABLE [Customer] ALTER COLUMN Email ADD MASKED WITH (FUNCTION = 'email()')
数値 このマスク形式は、数値列で使う必要があります。 乱数が、実際の値ではなくマスクされた値として表示されます。 クエリごとに異なる数値が表示されます。 ALTER TABLE [Customer] ALTER COLUMN [Month] ADD MASKED WITH (FUNCTION = 'random(1, 12)')
カスタム文字列 このオプションを使用すると、テキストを任意の値でマスクしたり、マスクされた値の終わりにカスタムの文字数を表示したりできます。 マスクされる値の長さが、マスクによって指定された文字数以下の場合は、マスクされた文字のみが表示されます。 ALTER TABLE [Customer] ALTER COLUMN [PhoneNumber] ADD MASKED WITH (FUNCTION = 'partial(1,"XXXXXXX",0)')

マスクが定義されている列からマスクされていないデータをユーザーが取得できるようにするには、明示的に UNMASK アクセス許可を付与する必要があります。

Note

結果に基づく推論を使って、マスクされたデータを識別できます。 データ マスクを使っている場合は、ユーザーがアドホック クエリを実行する機能も制限する必要があります。

そのため、機密データをより適切に保護するために、監査、暗号化、行レベルのセキュリティなどの他のセキュリティ機能と組み合わせて、動的データ マスクを使うことを強くお勧めします。

使用事例

データ マスクはシンプルで軽量な機能であり、次のようなさまざまなシナリオに最適です。

  • データベースに直接アクセスできないアプリケーション ユーザーからデータをマスクします。

  • ユーザーのグループに対して個人情報を制限します。

  • マスクされたデータを外部ベンダーに提供します。この場合は、機密情報を保護しながら、データ内の項目間のリレーションシップを維持する必要があります。

  • UNMASK アクセス許可を持たないユーザーによる開発のため、運用データベースのコピーを下位環境にエクスポートします。 データのエクスポートはマスクされた形式になります。

データのインポートとエクスポート

SELECT INTO または INSERT INTO を使って、マスクされた列のデータを別のテーブルにコピーすると、対象テーブルのデータはマスクされた状態になります。

UNMASK 特権を持たないユーザーが SQL Server のインポートとエクスポートを実行すると、エクスポートされたデータ ファイルにはマスクされたデータが含まれ、インポートされたデータベースには非アクティブにマスクされたデータが含まれます。

動的データ マスクのしくみについて詳しくは、「動的データ マスク」をご覧ください。