スマートスタイル TECH BLOG

MySQL Enterprise Masking and De-identification を使ってみた

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 への対応を考えると、このようなマスキング機能を活用し、データベースレベルでの対応も一考する必要があるのでは無いでしょうか?


MySQL
Return Top