テナントごとにデータベースが分離されているマルチテナントアプリケーションで、これらの個別のデータベースへの接続を認証するための最良の方法は何でしょうか。私の目標は:
考えられる1つのアプローチは、テナントのIDと認証の詳細を別のデータベースのテーブルに格納し、テナントのdbユーザー名とdbパスワードをフェッチして、それを使用して特定のテナントに接続することです。
すべてのテナントの認証がほぼ含まれているデータベースを照会し、リストから1つを選択するため、このアプローチについてはあまり安全ではありません。これが何らかの形で侵害された場合、個別のユーザー名とパスワードを使用して異なるデータベースを使用することはまったく問題になりません。
助言がありますか?
すべての認証データを共有データベースに配置しないでください。
テナントIDと認証の詳細を別のデータベースに保存する代わりに、ID(ユーザー名)とリダイレクトの詳細(サーバー/インスタンス。データベース名)を保存できます。その後、テナントのデータベースで認証を処理できます。
私は、管理者がユーザーに招待状を送信することを想定しています。すべてのアカウント情報は、主に独自のデータベースで処理されます。識別およびリダイレクトデータベースを使用して、重複するユーザー名の管理に役立ててください。新しいアカウントが作成されたら、データベース識別情報を含むレコードをここに作成するだけです(これは、ユーザー作成トランザクションの一部である必要があります)。データのこの共有部分には、機密性の高いものは何もありません。テナントを特定のアプリケーションサーバーにリダイレクトすることもできます。内部的には、データベースを移動する場合(巨大なクライアントが独自のサーバーを取得する場合があります)、リダイレクトレコードを変更するだけです。
Salesforce.comでは、システム全体でユーザー名を重複させることはできません。そのため、同じようにできるはずです。