多租户环境 - 多个成员资格提供商,每个租户 1 个数据库,一个单一应用程序

Posted

技术标签:

【中文标题】多租户环境 - 多个成员资格提供商,每个租户 1 个数据库,一个单一应用程序【英文标题】:Multi Tenant Environment - Multiple Membership providers, 1 DB per Tenant, One Single Application 【发布时间】:2012-12-05 18:39:51 【问题描述】:

我已经搜索了 SO,但找不到任何符合我的场景的内容...

多租户环境 - 多个成员资格提供商,每个租户 1 个数据库,Azure 上的一个应用程序...

问题很简单:

可以像这样配置 Asp.net 会员提供程序吗?有什么线索吗?

现在你们知道问题了,让我们进入细节......

这个堆栈应该在 Azure 上运行,SQL Azure 用于持久数据,以及 ASP.net 成员资格、MVC4、EF5 和一些令人眼花缭乱的东西......

挑战在于:

    创建在 Azure 中运行单个应用程序的多租户环境(辅助角色和 Web 角色,但不是特定于租户或面向租户);

    数据库一对一隔离(每个租户一个数据库);

    在每个数据库中运行一个 Asp.net Membership,用于对每个租户创建的用户进行身份验证和授权;

    一个主数据库,保存共享数据和一个主 Asp.net 成员资格,只有管理员用户(主站点管理员和租户管理员)登录...

重要的是,所有数据库都具有完全相同的结构,除了主要的......

不知道是否有帮助,但堆栈还包括 MVC4、EF5(DB First 方法);

其实我是在考虑使用MVC路由机制来收集租户标识,然后设置一个具体的Db Context,所有的操作都应该应用到这里;

有什么想法吗?

【问题讨论】:

为了添加一些额外的细节......在发布我的之前找到this线程。无论如何,我都不愿意在单个 asp.net 会员提供者中实现 n 个租户......对骨头有风险...... 供将来参考...只是喜欢this线程。并不完美,但它离解决方案更近了一步。真正的问题是它要求您将每个新租户都设置到 web.config 文件中。哦,如果这样的设置可以从数据源中动态弹出......想法? 【参考方案1】:

默认情况下,asp.net 成员资格不适合多租户环境,因为它不支持用于识别给定用户的成员资格和角色详细信息的租户标识符概念。您可以选择使用自定义成员资格提供程序,也可以使用联合或 SSO,并将应用程序角色映射到用户在使用应用程序时引入的 SSO 角色。

【讨论】:

【参考方案2】:

您应该能够在运行时配置 ASP.NET 成员数据库连接字符串。 This thread 有几个选项,包括自定义成员资格提供程序或在请求生命周期的早期通过 Global.asax.cs 更改值。

【讨论】:

以上是关于多租户环境 - 多个成员资格提供商,每个租户 1 个数据库,一个单一应用程序的主要内容,如果未能解决你的问题,请参考以下文章

多租户SaaS平台的数据库方案

何谓多租户模式 ?

什么是多租户模式?

多租户和多应用怎么对应

Serenity框架官方文档翻译3.2(多租户)

FreeSql 将 Saas 租户方案精简到极致[.NET ORM SAAS]