クライアント側のテナントごとの暗号化の実装についてかなりの掘り下げと調査を行いましたが、アプリケーションをどのように進めるべきかについて少し困惑しています。いくつかの背景として、を使用してデータベースdropwizard
に情報を格納する多くのカスタム DAO を持つアプリケーションがあります。データベースには、多くのテーブル、カスタム関数、カスタム ユーザー定義データ型があります。私たちの要件は、お客様の機密データを暗号化する必要があることです (データベース テーブルの特定の列)。データは、テナントごとに行で分割されます。postgres
jooq
データの暗号化をどこに置くかについて 2 つのオプションがあることを理解しています。
- 私たちのアプリケーションでは
- 私たちの
postgres
データベースでは
上記の2つのオプションを調べたときに見つけたものは次のとおりです。
私たちのアプリケーションに暗号化を入れることは私の当初の計画でしたが、すべての DAO を編集しなければならないことは、多くの問題を引き起こし、非常に時間がかかる可能性があります。
そこで、pgcrypto を使用して列側の暗号化を使用してデータベースに暗号化を処理させるという代替案を検討しました。ただし、前述のように、列のすべてのカスタム データ型が原因で、暗号化されたデータが として返されるため、これらのカスタム データ型の列に暗号化されたデータを保存することはできませんbytea
。ドキュメンテーションやその他のスタック オーバーフローの投稿の剪定 可能であれば回避したいカスタム タイプと bytea を受け入れるようにこれらの列のデータ型を変更する以外に、これに対する解決策を見つけることができませんでした。
この後、ここで説明した両方のオプションを使用すると、かなりの時間がかかり、アプリの多くが壊れる可能性があるため、次にどのように進めるのが最善かについて少し困惑しています。
私が持っていた他のいくつかのアイデア:
- 暗号化を調べ
jooq
たりliquibase
実行したりしましたが、何も見つかりませんでした。 - 列のデータ型を更新する代わりに、新しい暗号化されたバージョンのデータベースを作成し、テーブルのプレーンテキスト表現にビューを使用します。
私の大きな質問: ここでの背景情報を考えると、クライアント側の暗号化を実装するための提案や代替手段はありますか? (現在のアーキテクチャへの影響が最も少ない)
ありがとう!:)