Seeing is believing

いちエンジニアの日々の興味のあるところ、イベント参加記録、学びの共有を取止めなく※このblogは個人の見解であり所属する組織の見解ではありません

MyBatisでTypeHandlerを使ってDBカラム単位に暗号、復号

ちょっと調べたメモ

やりたいこと

  • 要件として、DBのカラム単位に暗号化してテーブルにInsert、Updateしたい
  • Selectする場合はオブジェクトにマッピングされた時点で複合されていてほしい
  • つまり、カラム単位の暗号化、復号化を透過的に行いたい  ⇨テーブルの中身には暗号化された状態で永続化しておきたい

前提

透過的なカラム単位の処理⇨TypeHandlerをつかったら良いのではないか?

  • TypeHandlerとは  - MyBatis自身もデフォルトで多数持っている、DBのカラム定義とJava側のフィールドの型定義のマッピングを行うもの

www.mybatis.org

  • よく使われるパターンとしては、Java側はEnum、テーブル側は文字列型とかのときに自作TypeHandlerとして使われる

qiita.com

  • Java8からのLocalDateTimeでも使われることがある

qiita.com

  • これを応用して、型としてはどちらも文字列型であるがDBに投入する際に暗号化、DBからSelectしてJavaオブジェクトにマッピングする際は複合化すればOKでは、と考えた

調べたら中国語ではあるがGithubに同じことをやろうとしているソースを発見。

github.com

結構いろいろやっているので、まずは以下のような単純な暗号化ロジックをつかって今後試してみたい。

www.suzushin7.jp