MySQL Enterprise Masking and De-identification とは?
MySQL Enterprise Masking and De-identification(マスキングと匿名化) に製品紹介ページが有るのですが、商用版の MySQL Edition のみで提供されている、セキュリティ関連の機能となっております
そこで、本記事はデータマスキング機能のうち、比較的利用シーンの多い機能である、選択的マスキングの使用方法と、単純な速度検証の結果をご紹介したいと思います
環境
項目 | 内容 |
---|---|
MySQL | MySQL 8.0.15-commercial |
OS | Oracle Linux Server release 7.6 |
CPU | 2vCPU |
Memory | 15GB |
InnoDB Buffer Pool | 11GB |
利用準備
商用版のバイナリにはプラグインは同梱されていますので、マニュアル の通りにコマンドを実行すれば、利用可能となります
データの準備
sysbench のカスタマイズスクリプトを用意する
今回は、後で行う速度検証のためにも、sysbench のカスタマイズスクリプトを用意しました
こちらのスクリプトを下記コマンドにて実行し、データを 200,000,000 件登録しています
データサイズは約 8GB となり、全てのデータが InnoDB Buffer Pool に乗るデータ量です
実際のアプリケーションでは、 mask_inner() ファンクションを使用した View を定義し、実体の表には Select 権限を付与しないことで、マスクされていないデータの情報漏えいの対策を行うのが一般的だと思われます
そこで、本スクリプトでも、マスクされたデータは View 経由で取得するようにし、実際に利用されるアプリケーションの利用シーンに近い状態での確認を行っております
DEFINER には実体の表へ Select 権限を付与しているユーザを指定し、View にアクセスするユーザと分離する必要がありますが、本検証では同一ユーザで検証しております
選択的マスキングの確認
mask_inner()
ファンクションを使用することで、簡単にマスキングされたデータが取得できました
速度検証
計測対象は実行クエリ数とし、マスキング処理の有り・無しで、それぞれ 10 回計測しております
sysbench の実施オプションは下記を指定しております
オプション | 値 |
---|---|
実行時間 | 10 分 |
スレッド | 2 |
データの準備の箇所にも記載しておりますが、マスクされたデータは、 View 経由で取得しております
まとめ
マスキング+Viewでのアクセスを行うことでおおよそ、10〜20%ほど、実行クエリ数が下がっています
しかし、Web アプリケーションの脆弱性や GDPR への対応を考えると、このようなマスキング機能を活用し、データベースレベルでの対応も一考する必要があるのでは無いでしょうか?