web-dev-qa-db-ja.com

個別のデータベースを使用するマルチテナントアプリケーションでDB認証を処理するにはどうすればよいですか?

テナントごとにデータベースが分離されているマルチテナントアプリケーションで、これらの個別のデータベースへの接続を認証するための最良の方法は何でしょうか。私の目標は:

  • 主なセキュリティ要件は、異なるテナントの偶発的または悪意のあるデータアクセスを回避することです
  • MySQLでこれを実現します。
  • 耐障害性については、バックアップから復元できることで十分です。

考えられる1つのアプローチは、テナントのIDと認証の詳細を別のデータベースのテーブルに格納し、テナントのdbユーザー名とdbパスワードをフェッチして、それを使用して特定のテナントに接続することです。

すべてのテナントの認証がほぼ含まれているデータベースを照会し、リストから1つを選択するため、このアプローチについてはあまり安全ではありません。これが何らかの形で侵害された場合、個別のユーザー名とパスワードを使用して異なるデータベースを使用することはまったく問題になりません。

助言がありますか?

2
Starx

すべての認証データを共有データベースに配置しないでください。

テナントIDと認証の詳細を別のデータベースに保存する代わりに、ID(ユーザー名)とリダイレクトの詳細(サーバー/インスタンス。データベース名)を保存できます。その後、テナントのデータベースで認証を処理できます。

私は、管理者がユーザーに招待状を送信することを想定しています。すべてのアカウント情報は、主に独自のデータベースで処理されます。識別およびリダイレクトデータベースを使用して、重複するユーザー名の管理に役立ててください。新しいアカウントが作成されたら、データベース識別情報を含むレコードをここに作成するだけです(これは、ユーザー作成トランザクションの一部である必要があります)。データのこの共有部分には、機密性の高いものは何もありません。テナントを特定のアプリケーションサーバーにリダイレクトすることもできます。内部的には、データベースを移動する場合(巨大なクライアントが独自のサーバーを取得する場合があります)、リダイレクトレコードを変更するだけです。

Salesforce.comでは、システム全体でユーザー名を重複させることはできません。そのため、同じようにできるはずです。

4
JeffO