2015-05-12 63 views
0

我們有一個多租戶Asp.Net MVC 4 Web應用程序,每個租戶都有自己的文件存儲庫(文件系統中的文件夾)。我們採用共享數據庫,共享模式方法,並通過他們的子域來識別租戶。多租戶物理隔離

確保租戶只能訪問他的存儲庫文件夾並且不能訪問文件系統中的其他文件夾的最佳方法是什麼?我們在應用程序業務邏輯中檢查它,但如果我們犯了一個錯誤...?

運行應用程序時,所有租戶都在同一用戶(在IIS應用程序池中定義)下運行。

我們是否需要爲每個租戶提供獨立的用戶 - 使用模擬?每次向服務器發出請求時,我們是否需要模擬 - 爲了填充它?

我聽說這有性能上的缺點,不是最好的方式,但是什麼?

我們還有一個windows服務,它在後臺填充請求(對於所有租戶),通過MSMQ發送給它。每次獲得請求時,此服務是否也需要更改其身份?

編輯: 另外,我們需要一種隔離的,如果有人上傳感染了病毒文件,該文件 - 它只會影響該租戶的文件,而不是服務器上的每個租戶。我們使用殺毒軟件,但是如果防病毒軟件不識別病毒,我們也需要這種分離。

謝謝

回答

0

所有租戶相同的用戶

如果每個租戶都有一個單獨的IIS Web下運行的應用程序和身份(無論是應用程序池或「正常」的用戶),那麼你就可以使用NTFS訪問控制。

這些並不取決於讓所有用戶在Web服務器上擁有本地或域用戶帳戶以允許模擬(以及此NTFS訪問控制)。

然而,它會在服務器上增加內存開銷 - 每個租戶都將擁有自己的工作進程。

[...] MSMQ。每次獲得請求時,此服務是否也需要更改其身份?

我不確定你可以做基於MSMQ消息的模擬,我希望這不起作用(MSMQ消息不攜帶必要的身份信息)。

共享任何東西都需要執行以檢查所有訪問:根據處理的性質,這可能會更困難(例如,如果客戶端請求可能是「從文件獲取信息」的順序一個任意文件:該服務需要執行訪問檢查)。


有Win32函數,將做繁重。

+0

謝謝理查德。我們不想爲每個租戶創建不同的網站和應用程序池,因爲我們需要將應用程序部署到服務器上的多個網站,每個租戶都有一個網站。你認爲冒充不是一種選擇嗎?謝謝 – Yaron

+0

@Yaron Windows和IIS將在一臺服務器上處理大量獨立的應用程序池(ISTR,我們的生產服務器上有> 30個)。如果可能,我肯定會走這條路線(有開銷,但不一定太多:只有你可以測試你的情況)。 – Richard

+0

@Yaron自從Win2k以來,設置模擬並不是我需要做的事情,但是當然,如​​果適用的話,需要在AD和站點配置中都有工作。並且僅限於使用Windows身份驗證。 – Richard