多租户数据库架构:处理租户需要共享数据的情况

时间:2012-12-29 02:11:45

标签: mysql database schema multi-tenant

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

这是我使用伪app的方案:

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

我还需要支持另一种皱纹:

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

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

所以我目前的想法是使用基于行的多租户方法和基于对象的安全性。每个对象都有一组与之关联的角色(例如Admin,Reader,Writer),角色将与用户相关联。然后,我将使用这些来验证每个对象的权限,而不是使用类似tenant_id的内容。

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

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

1 个答案:

答案 0 :(得分:0)

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