2

我必须使用 ASP.NET MVC 3 或更高版本和 SQL Server 2008。根据多租户数据架构帖子,有 3 种方法可以实现多租户

  1. 单独的数据库

  2. 共享数据库,分离模式

  3. 共享数据库,共享架构

我有以下细节:

  1. 用户应该能够备份和恢复他们的数据。
  2. 租户数量:1000(大约)
  3. 每个租户可能属于不同的域(url)。
  4. 它必须支持对租户的监控和管理。
  5. 它必须支持每个租户的用户认证和授权
  6. 它必须支持租户自定义(启用禁用功能集)
  7. 每个租户中的表数:100(初始)

我想知道您的经验表明哪种方法更适合考虑经济和安全的项目?有没有类似的好实时示例(开源项目)?我可以为该项目使用一台专用服务器。

4

2 回答 2

1

您对用户应该能够备份其数据的要求,可以通过方法 1 和 2 更容易地实现......因为这将是一个本地数据库任务。

如果您采用方法 3(共享-共享),则需要开发逻辑以提取属于单个租户的所有行并将其导出到 xml 文件或类似文件中。然后,如果您需要允许用户恢复该备份文件,则需要开发一个恢复逻辑。

我认为这是唯一可以让你远离#3 的要求。

一旦您使用表中的 TenantID 列设置数据库......如果您的客户非常关注安全性,您可以轻松地将一个数据库用于 1 个租户或一小组租户。例如,您可以在一个数据库中保存未付费的租户(免费/演示帐户),而在另一个数据库中保存付费客户。这样您就可以使用方法#3,但如果您需要它可以表现得像#1。

::: 奖金 :::

身份验证: 您需要扩展 MVC3 应用程序中使用的 SQL 成员资格和角色提供程序......以便用户登录仅在其所属的租户中有效。

多个域 在这里您可以看到一些使用 ASP.NET MVC3 路由的方法: MVC 3 子域路由

于 2012-12-27T13:01:07.050 回答
0

I would always use (3) Shared Database, Shared Schema.

If you want an example, how about Wordpress, Joomla, or any other popular open source web-based project?

Creating separate schemas or databases on a per-tenant basis will lead to massive management overhead. Not to mention increased complexity of analysing your data, costs, etc.

The only reason you'd go for (1) (or perhaps 2) is if you were to give your actual tenant direct access to some/all of the database. As you're using ASP.NET MVC 3, this isn't a consideration.

于 2012-12-27T10:01:54.427 回答