Azure SQL Databaseで動的データマスキング機能を使う

2021.08.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いわさです。

先日、Azure SQL Databaseで遊んでいたら、「動的データマスキング」という機能を発見しました。
SQL Server 2016 から登場した機能ですが、Azureポータル上からも設定が可能になっていまして、本日は少し触ってみました。

まずはデータベース作成

まずはAzure SQL Databaseを作成します。
みんな大好きAdventureWorksLTのサンプルデータを指定して構築します。

データベースが作成出来たら、動的データマスキングメニューからマスタの追加を行います。 マスクから除外されたSQLユーザーのところに以下の記載がありますので、管理者でアクセスした場合はマスクされなさそうですね。

管理者は常に除外されています

SQLサーバー作成時に指定した管理者認証情報を使い、クエリエディターからログインしてデータの取得を行ってみましょう。

マスクされていないですね。
それにしても、Azure SQL Databaseのクエリエディター良いですよね。Azureポータルでのお気に入りの機能のひとつです。

除外対象外ユーザーを作成しデータマスキングの確認

さて、管理者だから除外されていた、ことを確認するためにユーザーを作成します。

CREATE LOGIN iwasa2 WITH PASSWORD = 'xxxxxxxx'
CREATE USER iwasa2 FOR LOGIN iwasa2 WITH DEFAULT_SCHEMA = dbo
ALTER ROLE db_datareader ADD MEMBER iwasa2

ユーザーを作成し権限を付与できたら、クエリしてみましょう。

今後はマスクされていますね!

データのエクスポートでもマスクされる

データエクスポートをした際はマスクされて出力されるのでしょうか?

エクスポートされたデータ上もマスクされていますね。

外部のSQLクライアントでもマスクされる

Azureポータルのクエリエディター以外だとどうでしょうか。
Azure Data Studioからクエリしてみます。

マスクされていますね。

除外ユーザーへ追加するとマスクされない

除外ユーザーに追加したときの挙動も確認しました。

マスクされなくなりました。

まとめ

抽出後の置換処理など行わずともこの機能を使うと特定ユーザーに対してマスクして公開することが可能です。
データの移行や、抽出を行う際で個人情報関連のフィールドをマスクしたいシーンは多いと思います。
既存のテーブルをコピーしてマスクしたデータで更新するなども不要です。
機能のON/OFFも簡単です。

データマスクしたい時って意外に多いですよね。
活用シーン多そうです。こんな便利な機能を知らなかったとは。

参考

動的データ マスク - SQL Server | Microsoft Docs