多租户物理隔离

Multi-Tenant physical isolation

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

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

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

我们是否需要将每个租户作为单独的用户提供服务 - 使用模拟?每次向服务器发出请求时我们都需要模拟 - 以填充它吗?

我听说这有性能缺陷,不是首选方式,但什么是?

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

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

谢谢

all tenants run under the same user

如果每个租户都有单独的 IIS Web 应用程序和身份(无论是应用程序池还是 "normal" 用户),那么您可以使用 NTFS 访问控制。

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

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

[…]MSMQ. Does this service also needs to change its identity every time it gets a request?

我不确定您是否可以基于 MSMQ 消息进行模拟,我预计这不会起作用(MSMQ 消息不携带必要的身份信息)。

需要实施任何共享以检查所有访问:根据处理的性质,这可能会更加困难(例如,如果客户端请求可以是 "get information from the file"任意文件:服务需要进行访问检查1).


1 Win32 函数可以完成繁重的工作。