我們正在開發一個時下時髦多租戶SaaS的應用程序(共享數據庫,共享模式),並有一件事我不喜歡它:不透明租戶身份與SQL Server和NHibernate的
public class Domain : BusinessObject
{
public virtual long TenantID
{ get; set; }
public virtual string Name
{ get; set; }
}
TenantID
正在推動我的發展,因爲它幾乎無處不在,從安全的角度來看它是一個麻煩:如果惡意API用戶將TenantID
更改爲其他值,會混淆。
我想要做的是在我們的域對象中完全擺脫這個TenantID
,並讓NHibernate或SQL Server處理它。
從我已經在因特網和閱讀,這可以用CONTEXT_INFO
做(這裏是一個NHibernatebased implementation),NHibernate filters,SQL Views並與它們的組合。
現在,我的要求如下:
- 刪除所有提到的
TenantID
從域對象 - ...但SQL服務器插入它在適當情況下(我想這與
default
約束實現) - ...顯然支持基於此條件的過濾,以便客戶永遠不會看到彼此的數據
- 如果可能,請避免使用SQL Server視圖。
- 有一個解決方案,它與NHibernate很好地發揮,SQL服務器MARS和SaaS的一般性質的應用程序是高併發
你對那個想法嗎?