【问题标题】:Multi-tenant db schema: Handling case where tenants need to share data多租户数据库模式:处理租户需要共享数据的情况
【发布时间】:2012-12-14 05:26:50
【问题描述】:

我正在尝试为将由多个租户使用的新 Web 应用程序创建架构。我过去做过多租户设计,每个租户使用一个模式,但在这个新应用程序中,租户需要能够广泛地共享对数据的访问。

这是我使用伪应用的场景:

  • A 公司注册“Project Tracker”以跟踪他们的软件项目
  • B 公司也注册跟踪他们的软件项目
  • A 公司在 Project Tracker 中创建了一个包含大量工作项的新项目
  • 然后,A 公司将其中一些工作项分配给 B 公司内实际执行该工作的用户(例如使用承包商方案)

而且我还需要支持另一个皱纹:

  • 新软件项目的客户也需要能够登录并查看项目状态,即使他们在技术上不是租户

我意识到我可以使用单独的架构和联合用户来做到这一点,但如果可能的话,我会尽量让体验比这更简单。由于它是一个网络应用程序,我想使用电子邮件地址作为联合点,以便公司 A 可以将工作项分配给 joe@companyb.com,并且当乔使用该电子邮件地址登录时,他能够看到工作项并且可以在完成时将其标记为已完成。

所以我目前的想法是使用基于行的多租户方法和基于对象的安全性。每个对象都有一组与之关联的角色(例如管理员、读者、作家),并且这些角色将与用户相关联。然后,我将使用这些来验证每个对象的权限,而不是使用 tenant_id 之类的东西。

这意味着如果有人向他们提供访问权限,任何人都可以潜在地访问系统中的任何对象。成为租户实际上只是让您成为权限层次结构的根部的管理员(在示例中,这是允许您创建项目实体的公司实体的管理员)。这意味着这不再是真正的多租户架构......

有没有更好的方法来处理这种情况?

【问题讨论】:

  • 角色和授权听起来是正确的方法。您的角色将能够跨越租户,但这并不难。
  • 酷,只是确保我没有完全走错路。

标签: mysql database schema multi-tenant


【解决方案1】:

您可以使用用户 - 角色 - 租户类型的映射以及相应表中的租户 ID 列。因此,当 joe@companyb.com 尝试访问 companyA 记录时,您可以检查在 companyA 中是否存在 joe@companyb.com 的角色,该角色提供对 companyA 数据的访问权限。从长远来看,这种方式更加安全可靠。

【讨论】:

    猜你喜欢
    • 2014-03-21
    • 2019-05-18
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多