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

C# 多租户隔离数据库上DAL和配置的最佳实践,c#,asp.net,iis,data-access-layer,multi-tenant,C#,Asp.net,Iis,Data Access Layer,Multi Tenant,我的公司拥有十几个网站和独立的数据库(相同的模式)。 每个客户都有自己的网站(不同的应用程序池)和数据库 每个网站都有自己的配置,几个连接字符串,但它们都有相同的配置模式 cust1.domain.com cust2.domain.com cust3.domain.com 我们希望将所有网站合并到一个(单个应用程序池)中,并出于安全和大量数据的原因,使用独立的数据库 设计DAL及其配置的最佳实践是什么? 如果大量承租人将同时入住,这将产生什么影响?一个应用程序池可以管理这种情况,还是可以以某种方

我的公司拥有十几个网站和独立的数据库(相同的模式)。 每个客户都有自己的网站(不同的应用程序池)和数据库

每个网站都有自己的配置,几个连接字符串,但它们都有相同的配置模式

cust1.domain.com

cust2.domain.com

cust3.domain.com

我们希望将所有网站合并到一个(单个应用程序池)中,并出于安全和大量数据的原因,使用独立的数据库

设计DAL及其配置的最佳实践是什么? 如果大量承租人将同时入住,这将产生什么影响?一个应用程序池可以管理这种情况,还是可以以某种方式进行管理

顺便说一句,我们使用asp成员身份验证用户

提前感谢,,
Eddie

使用
全局.asax中的
应用程序_PostAuthenticate
事件加载正确的数据库,然后关闭
应用程序_EndRequest

中的连接。一个选项是在成员身份中使用配置文件,并存储一条信息,允许您确定它们应该是哪一个实际的数据库连接到。缺点是您需要在用户会话期间存储这段信息,因此可能需要cookie或会话变量


一个站点与多个站点的区别很大程度上取决于您的环境和应用程序,您当前是在一个框中有多个站点,还是有一个web场?你知道每个站点的并发用户数量,流量吗?Performance monitor可以帮助您查看每个站点的繁忙程度,但您可能需要更具侵入性的日志记录来确定并发用户等指标。我发现了有关IIS 7性能的服务器故障问题,这可能会有所帮助

您可以尝试使用多租户数据体系结构中的“具有不同架构的共享数据库”。在DAL中,您可以选择适合当前用户的特定模式。这样简单安全


继续阅读

您试图避免用户a在web.config上放置用户B数据库的情况-正确吗?是的,目标之一。每个客户都有自己的服务器连接字符串和其他设置。每个客户是否都有自己的个人用户帐户以及需要用于连接的数据库?通过web.config当前,我们在一个框中有多个站点(将来我们将把它们全部移到amazon,可能会创建多个web服务器)。每个公司都有10到20个用户。大多数系统都是基于报告的,因此,如果计算机忙于执行sql server,那么大部分时间都是基于报告的。有了这些级别的使用,您不应该对IIS有任何问题,您可以考虑为此使用web garden。有关配置IIS的详细信息,请查看[链接]()。除非你的应用程序试图打开数百个连接,否则我不认为你会有任何问题,但很明显,我不知道你的代码库或环境,所以不能保证任何事情。我们的大多数web应用程序都在对大量数据(基于报告)执行sql操作。我是否可以将每个客户(特定公司中的用户组)分配到其他工作流程?如何在客户之间隔离以保持高安全级别?@EddieR我不担心进程分离,只要您的数据访问是线程安全的,每个请求都将由IIS处理。您可以通过确保正确的用户访问正确的数据库来实现分离,从而确保每个用户只能使用正确的凭据访问其数据库,如果使用Windows Auth,则可以依赖active directory,如果其窗体Auth,则需要确保用户“已获得”创建正确的db连接时,这意味着不手动创建db连接,而是将其链接到他们所属的公司或集团。我缺少一个部分,我可以识别要加载的带ASPEMMERNATION的whitch db-要加载的配置。假设我希望将所有绑定合并到单个网站,一旦客户(特定公司中的用户组)连接,iis(或其负责方式)将重定向到客户的配置(如ConnectionString)。