SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Database で包括的なパーミッションによる動的データマスキングが可能となりました

leave a comment

次のアナウンスで情報が公開されていますが、SQL Database と Synapse Analytics で包括的なパーミッションによる動的データマスキング (Genular Permissions for Dynamid Data Masking) が可能となりました。

動的データマスキング (動的データマスク) の基本的な使用については次のドキュメントから確認することができます。

現時点では、SQL Database 向けの設定となっており、オンプレミスの SQL Server の最新バージョンである SQL Server 2019 では、包括的なパーミッションは利用することはできませんのであしからず。

従来までの動的データマスキング

従来までの動的データマスキング (動的データマスク) ですが、アクセス許可を付与して、マスクが解除されたデータを表示する に記載されているような、ユーザーに対して、UNMASK の権限を設定して制御を行うというものでした。

まずは、簡単に従来までの動作を見ていきましょう。

最初に次のようなユーザーを作成します。

CREATE USER MaskingTestUser01 WITHOUT LOGIN;
CREATE USER MaskingTestUser02 WITHOUT LOGIN;

EXEC sp_addrolemember 'db_owner', 'MaskingTestUser01'
EXEC sp_addrolemember 'db_datareader', 'MaskingTestUser02'

 

MaskingTestUser01 は db_owner のロールとなっており、MaskingTestUser02 は、db_datareader のロールとなっています。

それでは、マスクのテストを実施するために次のクエリを実行してみます。

EXECUTE AS USER = 'MaskingTestUser01';
DROP TABLE IF EXISTS MaskingTable
CREATE TABLE MaskingTable(
    C1 int MASKED WITH (FUNCTION = 'default()'), 
    C2 varchar(100) MASKED WITH (FUNCTION = 'default()')
)
INSERT INTO MaskingTable VALUES(100, NEWID()), (200, NEWID())
SELECT USER_NAME(), * FROM MaskingTable
REVERT

EXECUTE AS USER = 'MaskingTestUser02';
SELECT USER_NAME(), * FROM MaskingTable
REVERT

 

実行結果がこちらになります。

image

アクセス許可 に記載されていますが、DB のコントロール権限 (db_owner に含まれる) には、UNMASK の権限が含まれています。

データベースに対する CONTROL アクセス許可には、 ALTER ANY MASKUNMASK の両方のアクセス許可が含まれます。

そのため、MaskingTestUser01 は、マスクが解除されているデータが表示され、db_datareder の権限のみが付与されている MaskingTestUser02 は、データがマスクされた状態で表示されています。

MaskingTestUser02 にマスク解除 (UNMASK) の権限を付与する場合は次のクエリを実行します。


GRANT UNMASK TO MaskingTestUser02
-- REVOKE UNMASK TO MaskingTestUser02
-- DENY UNMASK TO MaskingTestUser02

EXECUTE AS USER = 'MaskingTestUser02';
SELECT USER_NAME(), * FROM MaskingTable
REVERT

 

image

UNMASK の権限が付与されている場合は、動的データマスキングを解除することができるため、実際のデータが表示されていることが確認できます。

従来までの動的データマスキングの範囲の制限

従来までの動的データマスキングでは、「UNMASK をユーザー (またはロール) に付与する」という形で権限の制御を行っていました。

UNMASK を設定できるオブジェクトのスコープというものが存在していなかったため「UNMASK を許可するかどうか」の設定のみが可能でした。

そのため、一部のオブジェクトや、列のみマスク解除を許可するという設定を行うことはできず、マスク解除の細かな権限の調整を行うことができないという制限がありました。

包括的なパーミッションによる動的データマスキング

SQL Database で新しく実装が行われた包括的なパーミッションによる動的なデータマスキングは、従来までのマスク解除が可能な範囲の制限を緩和させるものとなります。

冒頭で紹介した General availability: Dynamic data masking granular permissions for Azure SQL and Azure Synapse Analytics には、次のように記載されています。

Now in general availability, dynamic data masking (DDM) granular permissions for Azure SQL Database, Azure Synapse Analytics, and Azure SQL Managed Instance allows you to grant and deny UNMASK permission at the schema-level, the table-level, and the column-level. This enhancement provides a more granular way to control and limit unauthorized access to SQL assets on Azure and improve data security management.

動的データマスクの権限を設定する際にスコープを設定できるようになったのが、今回アナウンスのあった機能改善となります。

先ほどは、MaskingTestUser02 にマスク解除の権限を設定する際には次のクエリを実行していました。

GRANT UNMASK TO MaskingTestUser02

これを次のように設定することが可能となります。

GRANT UNMASK ON SCHEMA::dbo TO MaskingTestUser02
GRANT UNMASK ON OBJECT::MaskingTable TO MaskingTestUser02
GRANT UNMASK ON OBJECT::MaskingTable(C2) TO MaskingTestUser02

 

列単位でもマスク解除の権限が設定できるようになりましたので、ユーザーに応じて、一部の項目のみマスク解除を許可するという権限の設定が可能となりました。

image

 

まとめ

今までの「マスクの解除を許可するかどうか」だけでなく、「どのスコープに対してマスクの解除を許可するか」という権限を使用して動的データマスキングを使用することができるようになりました。

動的データマスキングの権限調整が従来より細かに実施することができるようになりましたので、動的データマスキングの新しい活用も可能になるのではないでしょうか。

Share

Written by Masayuki.Ozawa

4月 7th, 2021 at 11:38 am

Posted in SQL Database

Tagged with

Leave a Reply