【问题标题】:In Multi-Tenant Data Architecture, what is the best way to implement tenant filter view?在多租户数据架构中,实现租户过滤视图的最佳方式是什么?
【发布时间】:2011-03-28 11:49:23
【问题描述】:

我正在使用 ASP.Net MVC 2 和 SQL Server 数据库实现一个 SaaS 应用程序。我正在使用共享租赁方法。

要过滤数据,目前我找到了两种方法。

选项 1:http://msdn.microsoft.com/en-us/library/aa479086.aspx#mlttntda_tvf

对每个租户使用 sql 登录。因此,在视图中使用 SUSER_SID() 作为过滤器

选项 2:http://blogs.imeta.co.uk/jyoung/archive/2010/03/22/845.aspx

在 Context_Info 中存储租户 ID。因此,使用从 Context_Info 中读取租户 ID 的 sql 函数作为视图中的过滤器。

您能帮我选择合适的选项吗?

谢谢 谢谢

【问题讨论】:

    标签: sql-server asp.net-mvc-2 saas multi-tenant


    【解决方案1】:

    我认为这可以归结为安全模型之战。 DBA 可能会坚持你做前者。我更加务实,可能会将租户 ID 传递给我的 SP 或来自应用层的查询。

    我会通过大量单元测试来支持这一点,以确保一个租户永远无法看到另一个租户的数据,并且我只会将当前租户存储在会话或类似的服务器上,而不是存储在 cookie 或 URL 中,或任何其他可以在客户端被黑的地方。

    这使得添加新租户变得更加容易,因为不需要数据库配置。

    当然,会话可能会被黑客入侵,因此您需要采取一切预防措施以确保无论您在服务器上存储租户 ID,它都不会受到欺骗等的影响。

    【讨论】:

    • 我支持你:选项 1 不是很灵活,因为它基于每个用户都将存在于域级别的假设。选项 2 允许您拥有仅作为某些用户表中的行存在的用户。这使您可以通过与该租户域的 AD 同步来填充用户表。
    • 在会话中存储租户 ID 的选项不在我的考虑范围内,请您详细说明如何实现它?我要将租户站点 URL 映射到租户 ID。您在哪一层设置了租户 ID 会话?您会将其存储在应用程序缓存中吗?谢谢
    • 我认为这是一个标准网站:用户登录,然后获取他们的租户 ID 并重定向到该租户主页。虽然可以在 URL 中使用租户 ID,但您需要确认用户是否允许在每个请求中访问该租户 ID,并且一种简单的方法是将租户 ID 保留在会话中 (Session["TenantID"] = user.TenantID ) 这样您就不必在每次请求时都在数据库中查询用户的个人资料。我可能会将代码放在我的基本 Controller 类中,以确认允许用户访问查询字符串中的 TenantID;如果没有,它会重定向。
    • 感谢您的回复,我将在会话中使用租户 ID。
    【解决方案2】:

    我要补充一点,内联表值函数也可用于构建任何隔离层。

    【讨论】:

      猜你喜欢
      • 2012-05-26
      • 2012-03-24
      • 1970-01-01
      • 2018-06-15
      • 2013-12-26
      • 1970-01-01
      • 2018-04-06
      • 2014-11-16
      • 2015-01-05
      相关资源
      最近更新 更多