適用対象:Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics (専用 SQL プールのみ)
Microsoft Fabric SQL Database
Azure SQL Database、Microsoft Fabric SQL Database、Azure SQL Managed Instance、Azure Synapse Analytics では、動的データ マスク (DDM) がサポートされます。 動的データ マスキングでは、特権のないユーザーに対して機密データをマスキングすることでデータの公開を制限します。
動的データ マスキングでは、お客様が機密データをどの程度公開するかを、アプリケーション レイヤーへの影響を最小限に抑えながら指定できるようにすることで、機密データに対する未承認のアクセスを防止するのに役立ちます。 これはポリシー ベースのセキュリティ機能です。これにより、データベース内のデータはそのままで、指定したデータベース フィールドに対するクエリの結果セットで機密データを非表示にすることができます。
たとえば、コール センターのサービス担当者は、メール アドレスのいくつかの文字を確認することによって発信者を識別できます。ただし、完全なメール アドレスをサービス担当者に開示すべきではありません。 任意のクエリの結果セット内の電子メール アドレス全体をマスクするマスク ルールを定義できます。 別の例として、開発者は、適切なデータ マスクを定義し、個人データを保護し、法令遵守規定に違反することなくトラブルシューティングの目的で運用環境に対して照会を行うことができます。
動的データ マスキングの基礎
Azure SQL Database の場合、Azure portal で動的データ マスク ポリシーを設定するには、SQL Database 構成ペインの [セキュリティ] の下にある [動的データ マスク] ペインを選択します。
この機能は、SQL Managed Instance または Fabric SQL Database の Azure portal を使用して設定することはできません。 代わりに、この記事の 詳細なアクセス許可の例 のように、Transact-SQL (T-SQL) を使用してください。 詳細については、「 動的データ マスク」を参照してください。
動的データマスク方針
マスクから除外された SQL ユーザー: SQL クエリ結果でマスクされていないデータを取得する、Microsoft Entra ID からの ID を含めることができる一連の SQL ユーザー。 サーバー管理者、Entra 管理者、db_owner ロールなどの管理者権限を持つユーザーは、マスクなしで元のデータを表示できます。 (注: SQL Server の sysadmin ロールにも適用されます)
マスキング ルール: マスキングされる指定のフィールドと使用されるマスキング関数を定義するルールのセット。 データベースのスキーマ名、テーブル名、列名を使用し、指定のフィールドを定義できます。
マスキング関数: さまざまなシナリオに対応してデータの公開を制御する方法のセット。
マスク関数 マスキング ロジック デフォルト 指定のフィールドのデータ型に応じたフル マスク
フィールドのサイズが文字列データ型 (XXXX、ntext、nvarchar) に対して 4 文字未満の場合は、 (または少ない) を使用します。
数値データ型 (bigint、bit、decimal、int、money、numeric、smallint、smallmoney、tinyint、float、real) には 0 の値を使用します。
日付/時刻データ型 (date、1900-01-01、datetime、datetimeoffset、smalldatetime、time) にはを使用します。
sql_variantでは、現在の型の既定値が使用されます。
XML の場合、ドキュメント<masked />が使用されます。
特殊なデータ型 (タイムスタンプ、 テーブル、 HierarchyID、 uniqueidentifier、 バイナリ、 イメージ、 varbinary、空間型) には空の値を使用します。クレジット カード クレジット カードの形式でプレフィックスとして定数文字列を追加し、指定のフィールドの末尾 4 桁を公開するマスク方法。 XXXX-XXXX-XXXX-1234Email 電子メール アドレスの形式でプレフィックスとして定数文字列を使用して、最初の文字を公開し、ドメインを XXX.com に置き換えるマスク方法。 aXX@XXXX.comランダムな数値 選択した境界と実際のデータ型に応じて乱数を生成するマスク方法。 指定された境界が等しい場合、マスク関数は定数になります。
カスタム テキスト 間にカスタム埋め込み文字列を追加し、最初と最後の文字を公開するマスク方法。 元の文字列が公開されたプレフィックスやサフィックスより短い場合、埋め込み文字列のみが使用されます。 prefix[padding]suffix
Datetime 日付/時刻列、つまり datetime、datetime2、日付、時刻、datetimeoffset、および smalldatetime の詳細なマスクを有効にします。 年 ( datetime("Y"))、月 (datetime("M"))、日 (datetime("D"))、時間 (datetime("h"))、分 (datetime("m"))、秒 (datetime("s")) などの特定のコンポーネントをマスクできます。 この関数は T-SQL を使用して適用します。
例えば次が挙げられます。
- マスク年度:ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("Y")')。
マスク処理の月:ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("M")')。
- マスク分:ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("m")')。
マスクが推奨されるフィールド
DDM の推奨エンジンでは、データベースの特定のフィールドに「機密データの可能性あり」の注意が付けられます。この注意を参考にマスク候補を選択できます。 ポータルの [動的データ マスキング] ペインには、データベースの推奨列が表示されます。 1 つまたは複数の列に対して [マスクの追加] を選択し、適切なマスキング関数を選択して、[保存] を選択すると、それらのフィールドにマスクが適用されます。
T-SQL を使用して動的データ マスキングを管理する
- 動的データ マスクを作成するには、「動的データ マスクを作成する」を参照してください。
- 既存の列にマスクを追加するか、マスクを編集するには、「既存の列のマスクを追加または編集する」を参照してください。
- マスクされていないデータを表示するアクセス許可を付与するには、「アクセス許可を付与して、マスクが解除されたデータを表示する」を参照してください。
- 動的データ マスクをドロップするには、「動的データ マスクをドロップする」を参照してください。
PowerShell コマンドレットを使用して、ご使用のデータベースの動的データ マスクを設定する
データ マスキングのポリシー
データ マスキングのルール
- Get-AzSqlDatabaseDataMaskingRule
- New-AzSqlDatabaseDataMaskingRule
- Remove-AzSqlDatabaseDataMaskingRule
- Set-AzSqlDatabaseDataMaskingRule
REST API を使用してデータベース用の動的データ マスクを設定する
REST API を使用して、データ マスク ポリシーおよびルールをプログラムで管理できます。 公開された REST API では、次の操作がサポートされます。
データ マスキングのポリシー
データ マスキングのルール
- 作成または更新:データベース データ マスク ルールを作成または更新します。
- データベース別の一覧表示:データベース データ マスク ルールの一覧を取得します。
アクセス許可
動的データ マスクは、次の組み込みロールを使用して構成できます。
動的データ マスキングを使用するために必要なアクションは以下のとおりです。
読み取り/書き込み:
Microsoft.Sql/servers/databases/dataMaskingPolicies/*
Read:
Microsoft.Sql/servers/databases/dataMaskingPolicies/read
書き込み:
Microsoft.Sql/servers/databases/dataMaskingPolicies/write
T-SQL コマンドで動的データ マスキングを使用する場合のアクセス許可の詳細については、「アクセス許可」を参照してください
詳細なアクセス許可の例
機密データへの不正アクセスを防止し、データベースのさまざまなレベルで未承認ユーザーに対してマスクすることで制御を得る。
UNMASK権限は、データベース レベル、スキーマ レベル、テーブル レベル、または列レベルで、任意のデータベース ユーザーまたはロールに対して許可または取り消すことができます。 Microsoft Entra 認証と組み合わせることで、 UNMASK アクセス許可は、Azure 環境内で維持されるユーザー、グループ、アプリケーションに対して管理できます。
UNMASKアクセス許可は、データベースに格納されているデータへの未承認のアクセスを制御および制限し、データ セキュリティ管理を向上させる細かい方法を提供します。
ユーザー テーブルを含むスキーマを作成します。
CREATE SCHEMA Data; GOマスキングされた列を含むテーブルを作成します。
CREATE TABLE Data.Membership ( MemberID INT IDENTITY (1, 1) NOT NULL, FirstName VARCHAR (100) MASKED WITH (FUNCTION = 'partial(1, "xxxxx", 1)') NULL, LastName VARCHAR (100) NOT NULL, Phone VARCHAR (12) MASKED WITH (FUNCTION = 'default()') NULL, Email VARCHAR (100) MASKED WITH (FUNCTION = 'email()') NOT NULL, DiscountCode SMALLINT MASKED WITH (FUNCTION = 'random(1, 100)') NULL, BirthDay DATETIME MASKED WITH (FUNCTION = 'default()') NULL );サンプル データを挿入します。
INSERT INTO Data.Membership (FirstName, LastName, Phone, Email, DiscountCode, BirthDay) VALUES ('Roberto', 'Tamburello', '555.123.4567', 'RTamburello@contoso.com', 10, '1985-01-25 03:25:05'), ('Janice', 'Galvin', '555.123.4568', 'JGalvin@contoso.com.co', 5, '1990-05-14 11:30:00'), ('Shakti', 'Menon', '555.123.4570', 'SMenon@contoso.net', 50, '2004-02-29 14:20:10'), ('Zheng', 'Mu', '555.123.4569', 'ZMu@contoso.net', 40, '1990-03-01 06:00:00');サービス テーブルを含むスキーマを作成します。
CREATE SCHEMA Service; GOマスキングされた列を含むサービス テーブルを作成します。
CREATE TABLE Service.Feedback ( MemberID INT IDENTITY (1, 1) NOT NULL, Feedback VARCHAR (100) MASKED WITH (FUNCTION = 'default()') NULL, Rating INT MASKED WITH (FUNCTION = 'default()'), Received_On DATETIME );サンプル データを挿入します。
INSERT INTO Service.Feedback (Feedback, Rating, Received_On) VALUES ('Good', 4, '2022-01-25 11:25:05'), ('Excellent', 5, '2021-12-22 08:10:07'), ('Average', 3, '2021-09-15 09:00:00');データベースに別のユーザーを作成します。
CREATE USER ServiceAttendant WITHOUT LOGIN; GO CREATE USER ServiceLead WITHOUT LOGIN; GO CREATE USER ServiceManager WITHOUT LOGIN; GO CREATE USER ServiceHead WITHOUT LOGIN; GOデータベース内のユーザーに読み取りアクセス許可を付与します。
ALTER ROLE db_datareader ADD MEMBER ServiceAttendant; ALTER ROLE db_datareader ADD MEMBER ServiceLead; ALTER ROLE db_datareader ADD MEMBER ServiceManager; ALTER ROLE db_datareader ADD MEMBER ServiceHead;ユーザーに異なる
UNMASKアクセス許可を付与します。ServiceAttendantに列レベルのUNMASKアクセス許可を付与します。GRANT UNMASK ON Data.Membership (FirstName) TO ServiceAttendant;ServiceLeadにテーブルレベルのアクセス許可をUNMASKに付与します。GRANT UNMASK ON Data.Membership TO ServiceLead;UNMASKに対するスキーマ レベルでのServiceManager権限を付与します。GRANT UNMASK ON SCHEMA::Data TO ServiceManager; GRANT UNMASK ON SCHEMA::Service TO ServiceManager;UNMASKに対するデータベース レベルのアクセス許可をServiceHeadに付与する。GRANT UNMASK TO ServiceHead;
ユーザー
ServiceAttendantのコンテキストでデータのクエリを実行します。EXECUTE AS USER = 'ServiceAttendant'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;ユーザー
ServiceLeadのコンテキストでデータのクエリを実行します。EXECUTE AS USER = 'ServiceLead'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;ユーザー
ServiceManagerのコンテキストでデータのクエリを実行します。EXECUTE AS USER = 'ServiceManager'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;ユーザー
ServiceHeadのコンテキストでデータのクエリを実行するEXECUTE AS USER = 'ServiceHead'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;UNMASKアクセス許可を取り消すには、次の T-SQL ステートメントを使用します。REVOKE UNMASK ON Data.Membership (FirstName) FROM ServiceAttendant; REVOKE UNMASK ON Data.Membership FROM ServiceLead; REVOKE UNMASK ON SCHEMA::Data FROM ServiceManager; REVOKE UNMASK ON SCHEMA::Service FROM ServiceManager; REVOKE UNMASK FROM ServiceHead;