SE の雑記

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

SQL Server 2016 CTP 2.0 の Dynamic Data Masking を使ってみる

leave a comment

SQL Database では先行してプレビュー実装されていますが、SQL Server 2016 から Dynamic Data Masking が使用できるようになります。
有効にする方法が SQL Database とは違っているので軽くまとめてみたいと思います。
詳細については Dynamic Data Masking を参照してください。
おださんのブログも参考になります。
SQL Server 2016 CTP2 Dynamic Data Masking が構文エラーになる。。
SQL Server 2016 CTP2 Dynamic Data Masking の構文エラー回避方法

SQL Database v12 の場合はポータルや API 経由で有効にする必要がありましたが、SQL Server 2016 ではクエリベースで設定することができます。
現状は、設定時にトレースフラグの有効化が必要になるのでここが注意点かと。
# CTP 2.0 の場合の制約です。CTP 2.1 の場合はトレースフラグを有効にするとエラーとなってしまいます。

DBCC TRACEON(209,219,-1)

 
あとはサンプルのクエリを実行すれば準備は完了です。
image
実行プランとしては、「Compute Scalar」でマスクした値を返すというクエリになって実行されるようですね。
SQL Database の場合は、右の実行プランのように、動的データマスクを使用していても通常の実行プランとなるため、SQL Server 2016 と SQL Database ではユーザーから見える結果は同じですが、実装方法が微妙に異なっているのかもしれないですね。
imageimage
マスクされるかされないかについては「UNMASK」の権限により制御が行われているようで、マスクしない状態でデータを取得したい場合には「GRANT UNMASK」でマスクしない状態でのデータ取得を許可する必要が出てきます。

GRANT UNMASK TO TestUser;
DENY UNMASK TO TestUser;
REVOKE UNMASK TO TestUser;

ただし、db_owner の権限をつけた場合、マスクをしない状態でデータを取得できるようですので、マスクをする場合には「DENY UNMASK」でマスクしない状態でのデータ取得を拒否したほうがよさそうです。
Permissions (Database Engine) で確認をしたところ、 「UNMASK」の範囲は DATABASE のようですので、ユーザーによって、どのテーブルのみマスクしてデータを取得させるというような細かな設定はできず、データベースで一律の設定となるようです。

Share

Written by Masayuki.Ozawa

6月 8th, 2015 at 9:44 pm

Posted in SQL Server

Tagged with ,

Leave a Reply