多租户隔离数据库上 DAL 和配置的最佳实践
Posted
技术标签:
【中文标题】多租户隔离数据库上 DAL 和配置的最佳实践【英文标题】:best practice for DAL and configuration on Multi-Tenant isolated DB 【发布时间】:2012-12-23 05:31:32 【问题描述】:我的公司拥有十几个网站和独立的数据库(相同的模式)。 每个客户都有自己的网站(不同的应用程序池)和数据库。
每个网站都有自己的配置、多个连接字符串,但它们都有相同的配置架构。
cust1.domain.com
cust2.domain.com
cust3.domain.com
出于安全和大量数据的原因,我们希望将所有网站合并为一个(单个应用程序池)并使用隔离的数据库。
设计 DAL 及其配置的最佳实践是什么? 如果同时有大量租户,这意味着什么?一个应用程序池可以管理这种情况还是可以通过某种方式进行管理?
顺便说一句,我们正在使用 asp-membership 进行用户身份验证。
提前致谢, 埃迪
【问题讨论】:
您试图避免用户 A 在 web.config 上放置用户 B 数据库的情况 - 正确吗? 是的,目标之一。每个客户都有自己的服务器连接字符串和其他设置。 每个客户都有自己的个人用户帐户和需要用于连接的数据库 - 通过 web.config 【参考方案1】:使用global.asax
中的Application_PostAuthenticate
事件加载正确的数据库,然后关闭Application_EndRequest
中的连接
【讨论】:
我缺少一个部分,我可以在其中识别要加载 aspmembership 的 whitch DB - 要加载什么配置。假设我想将所有绑定合并到单个网站,并且一旦连接了客户(特定公司中的用户组),iis(或对其负责的方式)将重定向到客户的配置(如 connectionStrings)。【参考方案2】:一种选择是在成员资格中使用配置文件并存储一条信息,以便您确定他们应该连接到哪个实际数据库。缺点是您需要在用户会话期间存储这条信息,因此可能需要 cookie 或会话变量。
一个站点与多个站点的含义在很大程度上取决于您的环境和应用程序,您目前是在一个盒子上拥有多个站点还是有一个网络农场?你知道每个站点的并发用户数,流量吗?性能监视器可以帮助您查看每个站点的繁忙程度,但您可能需要更具侵入性的日志记录来确定并发用户等指标。我发现了this IIS 7 性能方面的服务器故障问题,这可能会有所帮助
【讨论】:
目前,我们在一个盒子上拥有多个站点(未来我们将把它全部转移到亚马逊,并可能创建多个 Web 服务器)。每家公司都有 10 到 20 个用户。大部分系统基于报告,所以如果机器忙于执行 sql server 的时间最多。 使用这些级别的 IIS 应该不会有任何问题,您可以考虑为此使用网络花园。查看 [链接] (codeproject.com/Articles/114910/…) 了解有关配置 IIS 的详细信息。除非您的应用程序试图打开数百个连接,否则我不相信您会有任何问题,但显然我不知道您的代码库或环境,因此无法保证任何事情 感谢@Nathan。我们的大多数网络应用程序都在对大量数据(基于报告)执行 sql 操作。我可以将每个客户(特定公司的用户组)分配到其他工作流程吗?如何在客户之间进行隔离以保持高安全级别? @EddieR 我不担心进程分离,只要您的数据访问是线程安全的,每个请求都将由 IIS 处理。您可以通过确保正确的用户访问正确的数据库来实现分离,因此确保每个用户只能使用正确的凭据访问他们的数据库,如果使用 Windows 身份验证,那么您可以依赖活动目录,如果其表单身份验证,那么您需要确保用户在创建时被“给予”正确的数据库连接,这意味着不手动创建数据库连接,而是将其链接到 co。或他们所属的组【参考方案3】:您可以尝试多租户数据架构中的“具有不同架构的共享数据库”。在您的 DAL 中,您可以选择特定于当前用户的特定模式。这种方式既简单又安全
继续阅读http://msdn.microsoft.com/en-us/library/aa479086.aspx
【讨论】:
以上是关于多租户隔离数据库上 DAL 和配置的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章