Azure上的ASP.NET多租户应用程序-处理到独立租户数据库的身份验证和连接

Azure上的ASP.NET多租户应用程序-处理到独立租户数据库的身份验证和连接,azure,multi-tenant,Azure,Multi Tenant,我在Azure上有一个多租户应用程序(ASP.NET Web表单),一个SQL Azure DB存储成员资格,每个租户的数据都有一个单独的SQL Azure DB。最初有10个租户,每个租户大约有2000个用户,但这可能会增加到50个租户 当涉及到身份验证和将每个用户连接到适当的租户数据库时,我是否走上了正确的道路 1) 。用户使用成员身份数据库进行身份验证 2) 。检索用户TenantID(作为用户配置文件的一部分存储) 3) 。基于TenantID从cscfg文件中选择DB连接字符串 4)

我在Azure上有一个多租户应用程序(ASP.NET Web表单),一个SQL Azure DB存储成员资格,每个租户的数据都有一个单独的SQL Azure DB。最初有10个租户,每个租户大约有2000个用户,但这可能会增加到50个租户

当涉及到身份验证和将每个用户连接到适当的租户数据库时,我是否走上了正确的道路

1) 。用户使用成员身份数据库进行身份验证

2) 。检索用户TenantID(作为用户配置文件的一部分存储)

3) 。基于TenantID从cscfg文件中选择DB连接字符串

4) 。在会话中存储连接字符串(AppFabric缓存)

上述方法需要在Azure服务配置文件中为每个租户存储一个单独的连接字符串,该文件最多可存储50个?这是一种更好的方法吗?例如,向成员数据库添加一个附加表以存储连接字符串?什么是最佳实践

你的观点和意见将受到极大的欢迎

提前谢谢。
Ben

我认为您的解决方案没有什么大问题。请参考您对连接字符串的关注,也许您可以使用一些算法从租户名称/id计算租户数据库基数


出于安全考虑,当您在会话中存储租户连接字符串时,您可能需要加密或散列,以确保最终用户无法知道连接字符串并侵入您的系统。

我的团队构建了一个多租户示例应用程序,您可以查看该应用程序,了解身份管理、数据库管理、,它将租户映射到租户数据库,还支持多个数据库服务器,以处理每个服务器150个数据库的限制


您可以抓取云忍者项目。

您可以研究的另一个选项是使用SQL Azure进行切分:


这样您就不需要所有的数据库,也不用担心存储所有的连接字符串。

我认为将成员数据存储到中央数据库中可能会出现问题。数据将随着租户数量的增长而增长。数据库备份还需要额外的步骤来包括成员数据。我宁愿将成员资格数据保存到单个租户数据库中。就连接字符串而言,您可以使用表存储或单个中央数据库来保存租户信息和相关的连接字符串。不建议存储到cscfg文件中,因为这是基于租户数量的动态存储。就我的2美分。

谢谢,我已经下载了,看起来很棒!谢谢Shaun,加密连接字符串是有意义的。我查看了Azure Federations,我担心的是安全性,因为数据是敏感的,而且租户需要能够备份/恢复他们自己的数据。谢谢你的建议。