RLSを用いたマルチテナント実装 for Django
DjangoCongress JP 2021 のトーク
概要
複数のテナント(チーム・組織)向けにサービスを提供するシステムで、テナント相互の情報を分離して扱う、複数のマルチテナントアーキテクチャが考案されています。
「各プログラマが努力して実装する」戦略でも実現はできますが、プログラミングミスや設定間違いによるデータ混濁が高確率で発生します。
このトークでは、マルチテナントアーキテクチャにおけるデータ分割アプローチのひとつ「共有アプローチ」をDjangoとPostgresのRow Level Security (RLS) の組合せで安全に実現する方法を紹介します。またこの方法のメリット、デメリットを紹介します。
スライド:
https://www.slideshare.net/shimizukawa/a-multitenant-implementation-using-rls-for-django
https://scrapbox.io/files/60dfbf265c48270022527806.png
RLSを使っているとき、DjangoAdminの表示時にWHERE句にはテナントIDでの絞り込み等がない
https://scrapbox.io/files/60e21c7e2845e200236588ee.png