多租户隔离数据库的DAL和配置最佳实践

6
我的公司拥有十几个网站和隔离的数据库(相同的模式)。每个客户都有自己的网站(不同的应用程序池)和数据库。
每个网站都有自己的配置,多个连接字符串,但它们都具有相同的配置模式。
cust1.domain.com
cust2.domain.com
cust3.domain.com
我们想将所有网站合并成一个(单一应用程序池),并保持隔离的数据库以确保安全性和大量数据原因。
设计DAL和其配置的最佳实践是什么?如果同时有大量租户,这会有哪些影响?一个应用程序池能否管理这种情况,或者可以通过某种方式来管理?
顺便说一下,我们正在使用asp-membership进行用户身份验证。
提前致谢, Eddie

你试图避免用户A在web.config中放置用户B数据库的情况,对吗? - Aristos
是的,这是其中一个目标。每个客户都有自己的多个连接字符串和其他设置。 - Eddie Rozenblat
每个客户是否可以拥有自己的个人用户账户,并在数据库中使用该账户进行连接 - 通过 web.config 文件。 - Aristos
3个回答

0
你可以尝试使用多租户数据架构中的“具有不同模式的共享数据库”。在你的数据访问层中,你可以选择特定于当前用户的模式。这种方式简单而安全。
继续阅读http://msdn.microsoft.com/en-us/library/aa479086.aspx

0
使用global.asax中的Application_PostAuthenticate事件加载正确的数据库,然后在Application_EndRequest中关闭连接。

我缺少一个可以识别要加载哪个带有aspmembership的数据库以及要加载哪个配置的部分。假设我想将所有绑定合并到单个网站中,一旦客户(特定公司的用户组)连接,iis(或负责此操作的实体)将重定向到客户的配置(如connectionStrings)。 - Eddie Rozenblat

0
一种选择是在会员资格中使用配置文件,并存储一些信息,以便您确定他们应连接到哪个实际的数据库。缺点是您需要在用户会话期间存储此信息,因此可能需要使用cookie或会话变量。
一个站点与多个站点之间的影响很大程度上取决于您的环境和应用程序,您当前是否在单个框上拥有多个站点,或者您是否拥有Web Farm?您知道每个站点的并发用户数和流量吗?性能监视器可以帮助您查看每个站点的繁忙程度,但您可能需要更具侵入性的日志记录来确定诸如并发用户之类的指标。我在this找到了一个关于IIS 7性能的Server Fault问题,可能会有所帮助。

目前,我们在一个服务器上拥有多个网站(未来我们将把它全部迁移到亚马逊,并可能创建几个Web服务器)。每个公司有10到20个用户。大多数系统基于报告,因此大部分时间机器都忙于执行SQL Server。 - Eddie Rozenblat
有了这些使用级别,您不应该在IIS上遇到任何问题,您可以考虑利用Web Garden。请查看[链接](http://www.codeproject.com/Articles/114910/What-is-the-difference-between-Web-Farm-and-Web-Ga)以获取有关配置IIS的详细信息。除非您的应用程序尝试打开数百个连接,否则我认为您不会遇到任何问题,但显然我不知道您的代码库或环境,因此无法保证任何事情。 - Nathan
感谢@Nathan。我们的大部分Web应用程序都在执行基于报告的大量数据的SQL操作。我能否将每个客户(特定公司的用户组)分配给其他工作流程?如何在客户之间进行隔离以保持高安全级别? - Eddie Rozenblat
@EddieR 我不会担心进程分离,只要你的数据访问是线程安全的,每个请求都将由IIS处理。你可以通过确保正确的用户使用正确的凭据访问正确的数据库来实现分离,这样每个用户只能访问他们的数据库,如果使用Windows身份验证,则可以依赖于活动目录,如果是表单身份验证,则需要确保在创建用户时“给”他们正确的数据库连接,这意味着不手动创建数据库连接,而是将其链接到他们所属的公司或组。 - Nathan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接