2016-08-30 13 views
3

私はマルチテナントSaaSアプリケーションを構築しようとしていますが、それには複数のアプローチがありますが、マルチデータベースを選択しました。マルチテナントSaaSアプリケーションのための最善のアプローチ

私はテナントごとにdbを作成し、メインデータベース にテナントのテーブルを格納し、サブドメインに基づいてそれぞれのデータベースにユーザーを接続します。

ここで私の問題は、どこにメインデータベースにユーザーを格納するのですか?またはテナントDBは、メインDBにユーザーを格納することは、他のDBのユーザーに関連するモデルを取得することが困難になりますが、テナントdb内に格納することは、すべてのユーザーを認証することが困難になります...

何が最善のシナリオですか?

  1. を取得し、jwtトークンを取得します。
  2. 各リクエストでトークンを送信します。
  3. 各トークンの検証、サブドメインのチェック、それぞれのテナントdbへの接続、実行要求。

これは良いアプローチですか? usersテーブルの問題をどうすればいいですか? ThnQ

+0

セッションを生成し、なぜ「テナントDB内にそれを保存するのは難しい、すべてのユーザーに認証するようになるだろう」あなたはそれをしたいですか? –

+0

多分私はそれを明確にしなかったかもしれません...テナントを指定しなくてもユーザログが初めての場合、テナントDBに保存してください。どのデータベースから認証するのですか? – Sherif

+1

メールのように見えるuserid([email protected]など)を使用してテナントを明示的に指定するか、リクエストを処理したドメイン名を調べて暗黙的にテナントを特定します。どちらの場合でも、各テナント内でユーザーIDを一意にする必要があります。つまり、誰かがテナント#1内でユーザIDボブを設定している場合、テナント#2内で他人がユーザIDボブを使用することを妨げてはなりません。 –

答えて

0

私は3番目のオプションを提供できます。テナントとメインDBの両方にユーザーを置いてください。ユーザーがテナント・データベースを変更したとき(またはその逆)にメインDBを更新するプロシージャを作成できます。

また、Laravelのモデルについてはわかりませんが、MySQLではクロスデータベースのJOINに問題はありません。

+0

が参加し、私は、重複データを回避しようと、私はそれはそれが依存悪い習慣 – Sherif

+0

だと思います。マルチテナントアプリケーションでは、パフォーマンスを向上させるために複数のデータを持つ方が良い場合があります。 1つのサーバーでは不十分な場合はどうなりますか?あなたは、単に複数のDBサーバ間のテナントデータベースを分割することができますが、あなたはまだメインデータベースにそれらのすべてを必要とします。 –

0

テナントデータベースにユーザーを保存することをお勧めします。サブドメインに基づいてテナントを区別するので、サブドメイン固有のデータベースをクエリするように認証システムに指示できます。認証の

共有の流れは

  1. ユーザーは
  2. ユーザーの資格情報は、認証に基づいてユーザ認証用のデータベースを決定するために資格情報を渡す前に、アプリケーション
  3. に送信されるアプリケーションのためにログインするためのサブドメインを打ちますユーザがそこから来たサブドメイン。
  4. パスデータベース名、ユーザーの資格情報認証システムへ
  5. 認証システムクエリ、特定のデータベースとユーザー
  6. を認証
関連する問題