我在Azure上有一个多租户应用程序(ASP.NET Web窗体),一个SQL Azure数据库存储成员资格,每个租户都有一个单独的SQL Azure数据库用于他们的数据。最初有10个租户,每个租户有大约2,000个用户,但这可能会增加多达50个租户。
在进行身份验证并将每个用户连接到相应的租户数据库时,我是否在正确的轨道上......
1)。用户使用Membership DB进行身份验证
2)。检索用户TenantID(存储为用户配置文件的一部分)
3)。根据TenantID
从cscfg文件中选择数据库连接字符串4)。在Session(AppFabric缓存)中存储连接字符串
上述方法要求在Azure Service配置文件中为每个租户存储一个单独的连接字符串,最多可达50个?他们是更好的方式吗?例如,在会员DB中添加一个附加表来存储连接字符串?什么是最佳做法?
您的意见和意见将受到极大的欢迎。
提前致谢。 本
答案 0 :(得分:2)
我的团队构建了一个多租户示例应用程序,您可以查看,获取有关身份管理,数据库管理等的想法。它将租户映射到租户数据库,并且还支持多个数据库服务器来处理150-每服务器数据库限制。
您可以抓住Cloud Ninja项目here。
答案 1 :(得分:1)
您可以研究的另一个选项是使用SQL Azure进行Sharding:
http://blogs.msdn.com/b/sqlazure/archive/2010/12/23/10108670.aspx
然后您不需要所有数据库并担心存储所有这些连接字符串。
答案 2 :(得分:0)
我认为您的解决方案中没有任何重大问题。如果您对连接字符串的关注,也许您可以使用某种算法从租户名称/ ID计算租户数据库库。
安全性有一点,当您在会话中存储租户连接字符串时,您可能需要加密或散列,以确保最终用户无法知道连接字符串并入侵您的系统。
答案 3 :(得分:0)
我认为将成员资格数据存储到中央数据库可能存在问题。数据将随着租户的增长而增长。数据库备份还需要额外的步骤来包含成员资格数据。我宁愿将会员数据保存到单个租户数据库中。在连接字符串方面,您可以使用表存储或单个中央数据库来保留租户信息和相关的连接字符串。建议不要存储到cscfg文件中,因为这是基于租户数量的动态。我的2美分。