SQL Server新旧バージョン混在環境での工夫など、「db tech showcase ONLINE 2020」講演レポート
ZOZOの「DB秘密情報取扱いガイドライン」とSQL Server実装例
2020年12月21日 08時00分更新
動的なデータマスキング機能が使えない環境での対応
こうして策定したガイドラインを、同社は「Microsoft SQL Server」で実装している。セッションで廣瀬氏は、実装の一部を紹介した。
たとえば、秘密情報カラムへのアクセス制限だ。今回のケースでは、「秘密情報カラムにアクセスできるアカウントの制限」と「秘密情報カラムのマスク化」の2点をSQL Serverで実現させる必要があった。この2点は、SQL Server 2016から提供されている「動的なデータマスキング機能」を使えば解決する。この機能は、ユーザーのクエリに対して名前、メールアドレス、電話番号などのデータを自動的にマスクした状態で返す。
ただし、この機能はSQL Server 2014以前のバージョンでは提供されていない。「当社ではSQL Server 2016より前のバージョンの環境もあるので、全環境では使えませんでした」(廣瀬氏)。そこで同社は、動的なデータマスキング機能の代替案として、次の3つの対応を行った。
代替案の1つ目は「ロールの活用」。各ログイン/ユーザーへの個別設定ではなく、SQL Serverのユーザー定義ロールを活用して、秘密情報へのアクセスを制限するロールを作成した。作成したロールに対して、秘密情報カラムのSELECT権限をはく奪すればよい。
代替案の2つ目は「秘密情報カラムに対するSELECT権限のはく奪(DENY)」だ。カラム単位で秘密情報のSELECT権限をはく奪すると、アクセス権のないユーザーで該当カラムを取得するSELECTを実行した際にエラーが発生する。さらに、秘密情報をSELECTしているVIEWの参照権限をはく奪した。
「VIEWに対してSELECT権限を持っているとベーステーブルで権限がはく奪されていてもSELECTできてしまうので、SELECTをはく奪したカラムを参照しているVIEWに対しても権限をはく奪する必要があります」(廣瀬氏)
代替案の3つ目は「動的なデータマスキングを使用しないマスク化」。各テーブルに対応したVIEW(マスク用VIEW)を作成し、テーブルに秘密情報カラムが存在する場合は該当のカラムをマスクするというやり方だ。
マスク用VIEWは、秘密情報カラムが存在しないテーブルを含む全テーブルに作成し、エンジニアがデータを確認するときはマスク用VIEWを使用する。「これによって、各テーブルに秘密情報カラムが存在しているかどうかを意識することなく、SELECT文を書くことができます」(廣瀬氏)。
秘密情報のメンテナンスの自動化
マスク用VIEWを作成するアプローチでは、テーブル内の秘密情報カラムの増減や、テーブルの定義変更などの変化があった場合、VIEWの再作成が必要になる。こういったマスク用VIEWのメンテナンス作業を、同社では自動化している。以下は、テーブルの定義変更に対する自動メンテナンスの実装だ。
また、テーブル内の秘密情報カラムが増加した場合は、新たにDENYが設定されたカラムをマスク化する、減少した場合はDENYが取り消し(REVOKE)されたカラムを実データ化する必要がある。これを自動化するために、同社では2つのリストを作成して比較し、DENY設定の変化を検知している。
* * *
ZOZOテクノロジーズが運用中の「データベースの秘密情報取扱いガイドライン」と、そのルールをSQL Serverへ実装する具体的な方法を紹介した同セッション。廣瀬氏は、「新型コロナでリモートワークの機会が増えた企業の皆さんの、秘密情報保護の取り組みの参考になれば幸いです」と述べ、講演を締めくくった。