DBデータのユーザー別暗号化
DBの特定データの暗号化について
前提環境
Django 3.0
MySQL 5.7
要求
複数の企業にサービス提供するが、企業同士でデータが見れないようにしてほしい
各企業ごとに暗号化鍵を持ち、万一データが混入してもデコードできないようにしたい
マルチテナントのDB設計ではない方法を検討したい
懸念
鍵の置き場所
アプリ設定に持つのはNG。企業が増えるたびに再デプロイが必要。
同じDBに置くのはNG。鍵と暗号化データを同じところに保管してはいけない
暗号化したデータはDB側で検索や集計が使えなくなる、INDEXが効かない
暗号化によってデータ量は増加する
ライブラリ
ざっくり調べるとDjangoで以下のライブラリがみつかった
https://pypi.org/p/django-cryptography/ v1.0 (2020/2/10)
Djangoプロジェクト単位でしか暗号化できなそうだ doc
https://pypi.org/p/django-encrypted-model-fields/ v0.5.8 (2018/7/30)
Djangoプロジェクト単位でしか暗号鍵を設定できない
参考
RailsのActiveRecordに入った暗号化の実装
https://github.com/rails/rails/pull/41659
検索もできる(ただし完全一致)