😀

Azure SQL Database で動的データマスク(DDM)を試してみた

に公開

私は、動的データマスクを、個人データや機密データを保護する目的で、データベースにアクセスするユーザーやロールに対してデータをマスクして表示する技術だと理解しています。今までインフラや CI/CD 周辺の仕事が多かったので、知識としては知っていた動的データマスクを実際に試してみました。

Azure SQL Database Free のクエリーエディターでテストデータを作成

sql
CREATE SCHEMA Data;
GO

CREATE TABLE Data.Membership (
    MemberID INT IDENTITY(1, 1) NOT NULL PRIMARY KEY CLUSTERED,
    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
);
GO

INSERT INTO Data.Membership (FirstName, LastName, Phone, Email, DiscountCode)
VALUES
('Roberto', 'Tamburello', '555.123.4567', 'RTamburello@contoso.com', 10),
('Janice', 'Galvin', '555.123.4568', 'JGalvin@contoso.com.co', 5),
('Shakti', 'Menon', '555.123.4570', 'SMenon@contoso.net', 50),
('Zheng', 'Mu', '555.123.4569', 'ZMu@contoso.net', 40);
GO

MASKED WITH (FNCTION = '') のマスクルールを理解

partial(1, "xxxxx", 1)

最初と最後の文字以外を x でマスクする。

default()

全て x でマスクする。

email()

Email 形式でマスクする。

random(1, 100)

1 から 100 の間の数値でランダム表示する。

まずは管理者でマスクなし表示

sql
SELECT * FROM Data.Membership;

azure-sql-database-01.png

マスク表示用ユーザーを作成

sql
CREATE USER MaskingTestUser WITHOUT LOGIN;

GRANT SELECT ON SCHEMA::Data TO MaskingTestUser;

マスク表示を試す

sql
EXECUTE AS USER = 'MaskingTestUser';

SELECT * FROM Data.Membership;

REVERT;

azure-sql-database-02.png

Azure ポータルから動的データマスクの状態を確認

azure-sql-database-03.png

参考

https://learn.microsoft.com/ja-jp/sql/relational-databases/security/dynamic-data-masking?view=sql-server-ver16#examples

Discussion