私たちは最近ファッショナブルなマルチテナント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アプリの一般的な性質とうまく連携するソリューションを用意する
それについてどう思いますか?