1

私たちは最近ファッショナブルなマルチテナントSaaSアプリ(共有データベース、共有スキーマ)を開発していますが、私が気に入らない点が1つあります。

public class Domain : BusinessObject
{
    public virtual long TenantID
    { get; set; }

    public virtual string Name
    { get; set; }
}

ほぼすべての場所で説明する必要があるため、これTenantIDは私を悩ませています。セキュリティの観点からは面倒です。悪意のあるAPIユーザーがTenantID他の値に変更し、混乱する場合はどうなりますか。

私がやりたいのはTenantID、ドメインオブジェクトでこれを完全に取り除き、NHibernateまたはSQLServerのいずれかで処理することです。

私がすでにインターネットで読んだことから、これはCONTEXT_INFO(NHibernateベースの実装)、NHibernateフィルターSQLビュー、およびそれらの組み合わせで行うことができます。

今、私の要件は次のとおりです。

  • TenantIDドメインオブジェクトからの言及を削除します
  • ...ただし、SQL Serverに適切な場所に挿入してもらいます(これはdefault制約によって実現されると思います)
  • ...そして明らかに、この基準に基づいたフィルタリングのサポートを提供し、顧客がお互いのデータを見ることは決してないようにします
  • 可能であれば、SQLServerビューは避けてください。
  • NHibernate、SQL ServerのMARS、および高度に同時実行されるSaaSアプリの一般的な性質とうまく連携するソリューションを用意する

それについてどう思いますか?

4

2 に答える 2

2

このドキュメントは、MultiTenantの聖杯であることがわかりました。 http://msdn.microsoft.com/en-us/library/aa479086.aspx

「共有データベース共有スキーマ」などのアプローチの1つを使用する方法を確認してから、テナントごとに異なるSQLユーザーを使用してデータベースに接続します。各SQLユーザーには、フィルタリングされたデータのサブセットが表示され、自分のデータのみを取得できます。データを挿入すると、自動的に自分のテナントIDが割り当てられます。

アプリケーションでTenantIDを考慮する必要がなくなり、残りのテーブルをモデル化できることがわかります。

于 2011-02-07T22:48:24.843 に答える
1

共有データベースと共有スキーマを使用して SaaS アプリケーションに使用するアプローチは、Jason Young によるブログ投稿に示されています。

これは、質問で提供した Jason Dentlerの投稿に関連しており、テーブルの代わりにビューをドメインにマッピングすると、かなり分離されたソリューションになります。私がとても気に入っているモデルから TenantID を完全に取り除くことができます。

私のアプリケーションでは、EntityFramework で使用していますが、残念ながら EF には、本当に残念なことのような素晴らしいものはありませんDriverConnectionProvider

于 2011-01-01T12:10:49.457 に答える