多租户物理隔离

时间:2015-05-12 08:41:06

标签: c# asp.net-mvc iis-7.5 impersonation multi-tenant

我们有一个多租户Asp.Net MVC 4 Web应用程序,每个租户都有自己的文件存储库(文件系统中的文件夹)。我们采用共享数据库,共享模式方法,并通过子域识别租户。

确保租户只能访问其存储库文件夹而文件系统中没有其他文件夹的最佳方法是什么?我们在应用程序业务逻辑中检查它,但如果我们犯了错误怎么办?

运行应用程序时,所有租户都在同一用户(在IIS应用程序池中定义)下运行。

我们是否需要作为单独的用户为每个租户提供服务 - 使用假冒?我们是否需要在每次向服务器发出请求时进行模拟 - 为了填充它?

我听说这有性能上的缺点而不是首选的方式,但是它是什么?

我们还有一个Windows服务,它在后台填写请求(适用于所有租户),通过MSMQ发送给它。每次收到请求时,此服务是否还需要更改其身份?

修改 此外,我们需要一种隔离,如果有人上传了感染了病毒的文件 - 它只会影响这个租户的文件,而不会影响服务器上的每个租户。我们使用防病毒软件,但是如果防病毒软件无法识别病毒,我们也需要这种分离。

谢谢

1 个答案:

答案 0 :(得分:1)

  

所有租户都在同一个用户下运行

如果每个租户都有一个单独的IIS Web App和身份(无论是app pool还是"普通"用户),那么您可以使用NTFS访问控制。

这些不依赖于让所有用户在Web服务器上拥有本地或域用户帐户以允许模拟(以及此NTFS访问控制)。

然而,它会增加服务器上的内存开销 - 每个租户都有自己的工作进程。

  

[...] MSMQ。每次收到请求时,此服务是否还需要更改其身份?

我不确定您是否可以根据MSMQ消息进行模拟,我希望这不起作用(MSMQ消息不带有必要的身份信息)。

需要实现任何共享以检查所有访问:根据处理的性质,这可能更加困难(例如,如果客户端请求可以是订单的某些内容"从文件中获取信息& #34;对于任意文件:服务需要进行访问检查 1 。)

1 有一些Win32功能可以解决这个问题。