第13回勉強会
The 13th Study Meetup
22th Dec. 2018
Japan SQL Server User Group
Microsoft
SQL Server 2019
®
Session
SQL Server 2019 Static Data Masking
(Preview)
SQL Server 2019 Static Data Masking
■該当セッションでの学習できること
①静的データマスキングの基礎
②SSMSで静的データマスキングの操作
■データマスキングは何?
データマスキングは、データベースにマスクを適用して機密情報を隠し、新しいデータまた
はスクラブされたデータに置き換えるプロセスである。
SQL Serverには、動的データマスキングと静的データマスキングがある。
■利用するシーン(データを隠して見せたくない)
①開発及びテスト
②アナリティクス(分析)とビジネスレポート
③トラブルシューティング
④コンサルタント、リサーチチーム、または第三者とデータベースを共有する
SQL Server 2019 Static Data Masking
■動的データマスキングとは
動的データマスク(DDM)は、特権のないユーザーに対してデリケートなデータをマスクし、
データの公開を制限する。
情報漏洩を防止できる機能である。
出典先:SQL Server 2017自習書
SQL Server 2019 Static Data Masking
■静的データマスキングとは
静的データマスキング(SDM)はSQL Server Management Studio 18 Preview
5の機能で、ユーザーはデータベースのマスクされたコピーを作成できる。
サポートしているSQL Serverバージョン:2012以降
ほかには、Azure Database、SQL Server 2012以降 on VM
SQL Server 2019 Static Data Masking
■静的データマスキング(SDM)と動的データマスキング(DDM)の比較
視点 静的データマスキング(SDM) 動的データマスキング(DDM)
データベース コピーされたデータベース オリジナルデータベース
検索 コピーされたデータベースのデータ
から元のデータを検索できない
元のデータのままなので、データ検索
できる
発生 ストレージレベルで発生する クエリを発行する時に発生する
アクセス すべてのユーザーは同じマスクされ
たデータをアクセスできる
マスク許可(権限)によって、ユーザー
からのアクセスの結果は変わる
SQL Server 2019 Static Data Masking
■静的データマスキング操作手順
SQL Server
Management
Studio 18 Preview 5
SQL Server 2019 Static Data Masking
■操作のステップ
SQL Server 2019 Static Data Masking
■ステップ1:対象テーブルやカラムをマスキング定義
■マスキングの種類
①シャッフル(= ORDER BY NEWID())
効果:同じテーブル内の列で、ランダムに入れ替える。元の列データがランダムにシャッフ
ルされる。
Configure:NULLの値の処理を除外する。つまり、NULLの行を対象外とする。
SQL Server 2019 Static Data Masking
■ステップ1:対象テーブルやカラムをマスキング定義
■マスキングの種類
②グループシャッフル(カラムセットでORDER BY NEWID())
効果:同じテーブル内で、指定した列をグルーピングし、グルーピングされた列をセットし
て、ランダムに入れ替える。
Configure:Group名を定義する
列カラム一つしか選択されていない場合、警告マークが出る。普通のシャッフルと同じ動作する。
SQL Server 2019 Static Data Masking
■ステップ1:対象テーブルやカラムをマスキング定義
■マスキングの種類
②グループシャッフル(カラムセットでORDER BY NEWID())
SQL Serverのいけていないところ!
Oracleのグループシャッフルと違い!
Oracleでは、グループのメンバー間で関係がある個別のユニットまたはグループ内の
シャッフルを実行できる。
名前 役職 マスキング前の給与 マスキング後の給与
Aさん マネージャ 100 200
Bさん マネージャ 200 100
Cさん エンジニア 10 30
Dさん エンジニア 20 10
Eさん エンジニア 30 20
SQL Server 2019 Static Data Masking
■ステップ1:対象テーブルやカラムをマスキング定義
■マスキングの種類
③Null(UPDATE カラム列 = null)
効果:指定したカラム列の値をすべてNullで置き換える。
Configure:なし
ただし、Null許可していないカラム列に対しては、エラーになる。
SQL Server 2019 Static Data Masking
■ステップ1:対象テーブルやカラムをマスキング定義
■マスキングの種類
④シングルバリュー(UPDATE カラム=固定値)
効果:対象カラム列に、ユーザーの固定値ですべて置き換える。
Configure:固定値の設定。
SQL Server 2019 Static Data Masking
■ステップ1:対象テーブルやカラムをマスキング定義
■マスキングの種類
⑤ストリングコンポジット(UPDATE カラム=指定したフォーマットで値を生成する)
効果:パターンに沿ってランダムな文字列を生成する。 これは、有効なエントリとして定義
済みのパターンに従わなければならない文字列用に設計されている。
Configure:さまざま(ID、電話番号、住所、メールアドレスなど)
SQL Server 2019 Static Data Masking
■ステップ1:対象テーブルやカラムをマスキング定義
■マスキングの種類
⑤ストリングコンポジット(UPDATE カラム=指定したフォーマットで値を生成する)
SQL Server 2019 Static Data Masking
■ステップ1:対象テーブルやカラムをマスキング定義
■マスキングの種類
⑤ストリングコンポジット(UPDATE カラム=指定したフォーマットで値を生成する)
フォーマット文法&ロジック
フォーマット 意味 例文 例文意味
¥d ランダム数字 (¥d){3} 3桁のランダム数字
¥w ランダム文字(アルファベッ
ト)(大文字、小文字無視)
(¥w){3} 3桁のランダム文字(大文
字、小文字無視)
¥l ランダム文字(小文字) (¥l){3} 3桁のランダム文字(小文
字のみ)
¥L ランダム文字(大文字) (¥L){3} 3桁のランダム文字(大文
字のみ)
¥? ランダム記号 (¥?){3} 3桁のランダム記号
. ランダム数字、文字、記号(大
文字、小文字無視)
(.){3} 3桁の数字+文字+記号
| 指定範囲内のランダム選択 (1|2|3) 範囲中の1、2、3どれか表
示
SQL Server 2019 Static Data Masking
■質問1:
日本の携帯番号のようなランダム数字を表すには?
(ハイフン入り、13桁)(ハイフンなし、11桁)
ハイフン入り: (¥d){3}-(¥d){4}-(¥d){4}
ハイフンなし: (¥d){11}
■質問2:
日本のリアルティな携帯番号のランダム数字を表すには?
ハイフン入り: (090|080|070)-(¥d){4}-(¥d){4}
ハイフンなし: (090|080|070)(¥d){8}
フォーマット 意味 例文 例文意味
¥d ランダム数字 (¥d){3} 3桁のランダム数字
| 指定範囲内のランダム選択 (1|2|3) 範囲中の1、2、3どれか表
示
SQL Server 2019 Static Data Masking
■ステップ1:対象テーブルやカラムをマスキング定義
■マスキングの種類
⑤ストリングコンポジット(UPDATE カラム=指定したフォーマットで値を生成する)
既存の文字列をキープしながら、指定したフォーマットでマスキングの場合、ストリングコ
ンポジットのアドバンストメニューを利用する。
SQL Server 2019 Static Data Masking
■ステップ2:出力フォルダを指定する
一時的に書き出すBAKファイルの指定フォルダを指定する。
デフォルトでは、DATAフォルダになる。既存のユーザーでベースのmdf、ldfと同じフォ
ルダになる。
■ステップ3:出力データベース名を指定する
マスキングできあがったデータベースがこの名前でリストアされる。
<Demo>
SQL Server 2019 Static Data Masking
■サポートされていない一覧
①履歴テーブルはサポートしていない。
②メモリ最適化テーブルはサポートしていない。
③計算列やID列を持つテーブルはサポートしていない。
④Azure SQL Hyperscaleデータベースはサポートしていない。
⑤地理情報データ型のテーブルはサポートしていない。
SQL Server 2019 Static Data Masking
■いくつかの注意点
①データベースをバックアップしてリストするので、バックアップおよびリストアのディスク
の空き容量が必要。
②デフォルトのバックアップファイル(bak)は、BACKUPフォルダに入れていなく、
DATAフォルダに入っている。PATHの変更をお勧めする。
③StaticDataMasking-Clone-{GUID}.bakは作られた後に、削除されない。要注
意。削除されていないことは悪いことを言っているのではなく、だれかに渡すために、システム側は
残ってしまう。同じインスタンス内で、別のデータベース名として展開する場合、bakファイルは余計
なものになる。
⇒メンテナンスが必要
④Loggingのとテキストリンクをクリックすると、テキストを開くのではなく、そのテキス
トが入っているフォルダが開かれる。すでに開かれる場合でも、新規Windowとしてさらに開かれ
る。(いけていない)
⑤ マスキングしてから統計情報は更新されていないため、UPDATE STATISTICSを
更新するようにしてください。
⑥マスキング最中にエラーが発生してしまった場合、処理が中断され、コピーされたデー
タベースは削除されないため、機密情報の漏洩があるため、必ず、手動で削除してください。
⑦ (SQL Serverのみ)データファイルとログファイルには、静的データマスキングが完了
した後に未割り当てメモリに機密データのビットが含まれていることがある。この機密データは、
データファイルとログファイルへのアクセス権が与えられている場合は、16進エディタで取り出すこ
とができる。SQL Serverサービスをリセットすることも推奨している。
SQL Server 2019 Static Data Masking
■SDMの裏話
①スクリプト再生を押すと、スクリプトが作成されなく、実行されてしまう。
SQL Server 2019 Static Data Masking
■SDMの裏話
②シャフルのプロセスの流れ:
既存のデータベースのバックアップを取る。
SQL Serverなのか、SQL Azureなのか、処理を分ける。サーバーのプロパティ確認。
※SQL Azureの場合(確認していない)
オンプレミスのSQL Serverの場合、バックアップからリストアを行う。
リストアしてから、対象のテーブルのカラムを別名で、Tempカラムを作る。
変更対象カラムの値をORDER BY NEWID()でランダム並び替える。
CREATE TABLEで、Tempテーブル(替えられたカラムと変更しようとする元のカラ
ム)を作成する
対象のテーブル(Tempカラム)とTempテーブルと結合して、データを入れ替える。
Tempテーブルを削除する
対象のテーブルのTempカラムも削除する
⇒わかったのは、先に変換するのではなく、先にバックアップして、そのバックアップした
DBに対して、Tempカラムやら、Tempテーブルやら、入れ替える。
メールアドレス、電話番号のマスキングはMASK Functionを利用される。
一連の操作はマニュアルでも対応できるが、UIで設定して、裏で処理を組んでくれる。
SQL Server 2019 Static Data Masking
■SDMの裏話
③バックアップファイルには暗号化なし。
SQL Server 2019 Static Data Masking
■SDMの裏話
④TXTログのPathの指定は固定されている。フォルダ名の指定もできない。
SQL Server 2019 Static Data Masking
■SDMの裏話
④TXTログのPathの指定は固定されている。
public static string GenerateLoggingFilePath()
{
return
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Perso
nal), "Static Data Masking", "MaskingLog-" +
DateTime.Now.ToString("yyyyMMdd-HHmmss") + ".txt");
}

Sql serve2019 staticdatamaskting

  • 1.
    第13回勉強会 The 13th StudyMeetup 22th Dec. 2018 Japan SQL Server User Group Microsoft SQL Server 2019 ®
  • 2.
    Session SQL Server 2019Static Data Masking (Preview)
  • 3.
    SQL Server 2019Static Data Masking ■該当セッションでの学習できること ①静的データマスキングの基礎 ②SSMSで静的データマスキングの操作 ■データマスキングは何? データマスキングは、データベースにマスクを適用して機密情報を隠し、新しいデータまた はスクラブされたデータに置き換えるプロセスである。 SQL Serverには、動的データマスキングと静的データマスキングがある。 ■利用するシーン(データを隠して見せたくない) ①開発及びテスト ②アナリティクス(分析)とビジネスレポート ③トラブルシューティング ④コンサルタント、リサーチチーム、または第三者とデータベースを共有する
  • 4.
    SQL Server 2019Static Data Masking ■動的データマスキングとは 動的データマスク(DDM)は、特権のないユーザーに対してデリケートなデータをマスクし、 データの公開を制限する。 情報漏洩を防止できる機能である。 出典先:SQL Server 2017自習書
  • 5.
    SQL Server 2019Static Data Masking ■静的データマスキングとは 静的データマスキング(SDM)はSQL Server Management Studio 18 Preview 5の機能で、ユーザーはデータベースのマスクされたコピーを作成できる。 サポートしているSQL Serverバージョン:2012以降 ほかには、Azure Database、SQL Server 2012以降 on VM
  • 6.
    SQL Server 2019Static Data Masking ■静的データマスキング(SDM)と動的データマスキング(DDM)の比較 視点 静的データマスキング(SDM) 動的データマスキング(DDM) データベース コピーされたデータベース オリジナルデータベース 検索 コピーされたデータベースのデータ から元のデータを検索できない 元のデータのままなので、データ検索 できる 発生 ストレージレベルで発生する クエリを発行する時に発生する アクセス すべてのユーザーは同じマスクされ たデータをアクセスできる マスク許可(権限)によって、ユーザー からのアクセスの結果は変わる
  • 7.
    SQL Server 2019Static Data Masking ■静的データマスキング操作手順 SQL Server Management Studio 18 Preview 5
  • 8.
    SQL Server 2019Static Data Masking ■操作のステップ
  • 9.
    SQL Server 2019Static Data Masking ■ステップ1:対象テーブルやカラムをマスキング定義 ■マスキングの種類 ①シャッフル(= ORDER BY NEWID()) 効果:同じテーブル内の列で、ランダムに入れ替える。元の列データがランダムにシャッフ ルされる。 Configure:NULLの値の処理を除外する。つまり、NULLの行を対象外とする。
  • 10.
    SQL Server 2019Static Data Masking ■ステップ1:対象テーブルやカラムをマスキング定義 ■マスキングの種類 ②グループシャッフル(カラムセットでORDER BY NEWID()) 効果:同じテーブル内で、指定した列をグルーピングし、グルーピングされた列をセットし て、ランダムに入れ替える。 Configure:Group名を定義する 列カラム一つしか選択されていない場合、警告マークが出る。普通のシャッフルと同じ動作する。
  • 11.
    SQL Server 2019Static Data Masking ■ステップ1:対象テーブルやカラムをマスキング定義 ■マスキングの種類 ②グループシャッフル(カラムセットでORDER BY NEWID()) SQL Serverのいけていないところ! Oracleのグループシャッフルと違い! Oracleでは、グループのメンバー間で関係がある個別のユニットまたはグループ内の シャッフルを実行できる。 名前 役職 マスキング前の給与 マスキング後の給与 Aさん マネージャ 100 200 Bさん マネージャ 200 100 Cさん エンジニア 10 30 Dさん エンジニア 20 10 Eさん エンジニア 30 20
  • 12.
    SQL Server 2019Static Data Masking ■ステップ1:対象テーブルやカラムをマスキング定義 ■マスキングの種類 ③Null(UPDATE カラム列 = null) 効果:指定したカラム列の値をすべてNullで置き換える。 Configure:なし ただし、Null許可していないカラム列に対しては、エラーになる。
  • 13.
    SQL Server 2019Static Data Masking ■ステップ1:対象テーブルやカラムをマスキング定義 ■マスキングの種類 ④シングルバリュー(UPDATE カラム=固定値) 効果:対象カラム列に、ユーザーの固定値ですべて置き換える。 Configure:固定値の設定。
  • 14.
    SQL Server 2019Static Data Masking ■ステップ1:対象テーブルやカラムをマスキング定義 ■マスキングの種類 ⑤ストリングコンポジット(UPDATE カラム=指定したフォーマットで値を生成する) 効果:パターンに沿ってランダムな文字列を生成する。 これは、有効なエントリとして定義 済みのパターンに従わなければならない文字列用に設計されている。 Configure:さまざま(ID、電話番号、住所、メールアドレスなど)
  • 15.
    SQL Server 2019Static Data Masking ■ステップ1:対象テーブルやカラムをマスキング定義 ■マスキングの種類 ⑤ストリングコンポジット(UPDATE カラム=指定したフォーマットで値を生成する)
  • 16.
    SQL Server 2019Static Data Masking ■ステップ1:対象テーブルやカラムをマスキング定義 ■マスキングの種類 ⑤ストリングコンポジット(UPDATE カラム=指定したフォーマットで値を生成する) フォーマット文法&ロジック フォーマット 意味 例文 例文意味 ¥d ランダム数字 (¥d){3} 3桁のランダム数字 ¥w ランダム文字(アルファベッ ト)(大文字、小文字無視) (¥w){3} 3桁のランダム文字(大文 字、小文字無視) ¥l ランダム文字(小文字) (¥l){3} 3桁のランダム文字(小文 字のみ) ¥L ランダム文字(大文字) (¥L){3} 3桁のランダム文字(大文 字のみ) ¥? ランダム記号 (¥?){3} 3桁のランダム記号 . ランダム数字、文字、記号(大 文字、小文字無視) (.){3} 3桁の数字+文字+記号 | 指定範囲内のランダム選択 (1|2|3) 範囲中の1、2、3どれか表 示
  • 17.
    SQL Server 2019Static Data Masking ■質問1: 日本の携帯番号のようなランダム数字を表すには? (ハイフン入り、13桁)(ハイフンなし、11桁) ハイフン入り: (¥d){3}-(¥d){4}-(¥d){4} ハイフンなし: (¥d){11} ■質問2: 日本のリアルティな携帯番号のランダム数字を表すには? ハイフン入り: (090|080|070)-(¥d){4}-(¥d){4} ハイフンなし: (090|080|070)(¥d){8} フォーマット 意味 例文 例文意味 ¥d ランダム数字 (¥d){3} 3桁のランダム数字 | 指定範囲内のランダム選択 (1|2|3) 範囲中の1、2、3どれか表 示
  • 18.
    SQL Server 2019Static Data Masking ■ステップ1:対象テーブルやカラムをマスキング定義 ■マスキングの種類 ⑤ストリングコンポジット(UPDATE カラム=指定したフォーマットで値を生成する) 既存の文字列をキープしながら、指定したフォーマットでマスキングの場合、ストリングコ ンポジットのアドバンストメニューを利用する。
  • 19.
    SQL Server 2019Static Data Masking ■ステップ2:出力フォルダを指定する 一時的に書き出すBAKファイルの指定フォルダを指定する。 デフォルトでは、DATAフォルダになる。既存のユーザーでベースのmdf、ldfと同じフォ ルダになる。 ■ステップ3:出力データベース名を指定する マスキングできあがったデータベースがこの名前でリストアされる。 <Demo>
  • 20.
    SQL Server 2019Static Data Masking ■サポートされていない一覧 ①履歴テーブルはサポートしていない。 ②メモリ最適化テーブルはサポートしていない。 ③計算列やID列を持つテーブルはサポートしていない。 ④Azure SQL Hyperscaleデータベースはサポートしていない。 ⑤地理情報データ型のテーブルはサポートしていない。
  • 21.
    SQL Server 2019Static Data Masking ■いくつかの注意点 ①データベースをバックアップしてリストするので、バックアップおよびリストアのディスク の空き容量が必要。 ②デフォルトのバックアップファイル(bak)は、BACKUPフォルダに入れていなく、 DATAフォルダに入っている。PATHの変更をお勧めする。 ③StaticDataMasking-Clone-{GUID}.bakは作られた後に、削除されない。要注 意。削除されていないことは悪いことを言っているのではなく、だれかに渡すために、システム側は 残ってしまう。同じインスタンス内で、別のデータベース名として展開する場合、bakファイルは余計 なものになる。 ⇒メンテナンスが必要 ④Loggingのとテキストリンクをクリックすると、テキストを開くのではなく、そのテキス トが入っているフォルダが開かれる。すでに開かれる場合でも、新規Windowとしてさらに開かれ る。(いけていない) ⑤ マスキングしてから統計情報は更新されていないため、UPDATE STATISTICSを 更新するようにしてください。 ⑥マスキング最中にエラーが発生してしまった場合、処理が中断され、コピーされたデー タベースは削除されないため、機密情報の漏洩があるため、必ず、手動で削除してください。 ⑦ (SQL Serverのみ)データファイルとログファイルには、静的データマスキングが完了 した後に未割り当てメモリに機密データのビットが含まれていることがある。この機密データは、 データファイルとログファイルへのアクセス権が与えられている場合は、16進エディタで取り出すこ とができる。SQL Serverサービスをリセットすることも推奨している。
  • 22.
    SQL Server 2019Static Data Masking ■SDMの裏話 ①スクリプト再生を押すと、スクリプトが作成されなく、実行されてしまう。
  • 23.
    SQL Server 2019Static Data Masking ■SDMの裏話 ②シャフルのプロセスの流れ: 既存のデータベースのバックアップを取る。 SQL Serverなのか、SQL Azureなのか、処理を分ける。サーバーのプロパティ確認。 ※SQL Azureの場合(確認していない) オンプレミスのSQL Serverの場合、バックアップからリストアを行う。 リストアしてから、対象のテーブルのカラムを別名で、Tempカラムを作る。 変更対象カラムの値をORDER BY NEWID()でランダム並び替える。 CREATE TABLEで、Tempテーブル(替えられたカラムと変更しようとする元のカラ ム)を作成する 対象のテーブル(Tempカラム)とTempテーブルと結合して、データを入れ替える。 Tempテーブルを削除する 対象のテーブルのTempカラムも削除する ⇒わかったのは、先に変換するのではなく、先にバックアップして、そのバックアップした DBに対して、Tempカラムやら、Tempテーブルやら、入れ替える。 メールアドレス、電話番号のマスキングはMASK Functionを利用される。 一連の操作はマニュアルでも対応できるが、UIで設定して、裏で処理を組んでくれる。
  • 24.
    SQL Server 2019Static Data Masking ■SDMの裏話 ③バックアップファイルには暗号化なし。
  • 25.
    SQL Server 2019Static Data Masking ■SDMの裏話 ④TXTログのPathの指定は固定されている。フォルダ名の指定もできない。
  • 26.
    SQL Server 2019Static Data Masking ■SDMの裏話 ④TXTログのPathの指定は固定されている。 public static string GenerateLoggingFilePath() { return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Perso nal), "Static Data Masking", "MaskingLog-" + DateTime.Now.ToString("yyyyMMdd-HHmmss") + ".txt"); }