私は、動的データマスクを、個人データや機密データを保護する目的で、データベースにアクセスするユーザーやロールに対してデータをマスクして表示する技術だと理解しています。今までインフラや 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;
マスク表示用ユーザーを作成
sql
CREATE USER MaskingTestUser WITHOUT LOGIN;
GRANT SELECT ON SCHEMA::Data TO MaskingTestUser;
マスク表示を試す
sql
EXECUTE AS USER = 'MaskingTestUser';
SELECT * FROM Data.Membership;
REVERT;
Azure ポータルから動的データマスクの状態を確認
参考