テナント分離の方法¶
マルチテナントSaaSにおいて、テナントごとにデータを分離する方法は主に3つある
アプリケーションの実行環境ごと完全に分離する
データベースのみをインスタンスやスキーマで分離する
データベースのインスタンスやスキーマはマルチテナントとして、テーブル内のテナントIDで分離する
上のものほど安全に分離できるが、リソース効率が悪くなる。
Row Level Security (RLS)¶
Row Level Security (RLS)は、テーブル内の行へのアクセスを制御する機能。
RLS を利用すると、SELECT 文などに暗黙的な WHERE 句 (where tenant_id = xxx) が追加されたような挙動が実現できる。
注意点¶
パフォーマンスがやや悪くなる
コネクション管理が煩雑になる
current_userではなくcurrent_settingをポリシーに使うことでコネクション管理が複雑にならないらしいPostgreSQL の行レベルのセキュリティを備えたマルチテナントデータの分離 | Amazon Web Services ブログ
info - Unknown Directive
info - Unknown DirectiveAWSによる、PostgreSQLでのRLSの例 [aws-samples/aws-saas-factory-postgresql-rls](https://github.com/aws-samples/aws-saas-factory-postgresql-rls) ([PostgreSQL の行レベルのセキュリティを備えたマルチテナントデータの分離 | Amazon Web Services ブログ](https://aws.amazon.com/jp/blogs/news/multi-tenant-data-isolation-with-postgresql-row-level-security/))