多租户数据库中的复合键

Tho*_*mas 4 database security multi-tenant

我正在设计一个纯多租户数据库(一个数据库,一个模式),我想在我的大多数表中保留一个Tenant_Id作为安全措施,以确保数据不会落入错误的租户手中.看起来这需要每个表上的复合键.

例:

在单租户情况下,我会有一个主键:

Animal_Id (PK)  
Animal_Type  
Animal_Name  
Run Code Online (Sandbox Code Playgroud)

在多租户情况下,我会为Tenant_Id添加另一个主键:

Animal_Id (PK)  
Tenant_Id (PK)  
Animal_Type  
Animal_Name  
Run Code Online (Sandbox Code Playgroud)

是否在每个表中添加一个Tenant_Id列意味着我需要在每个表中都有一个复合键,或者有一种安全的方法可以避免这种情况吗?复合键是可以的,但如果可以,我想避免使用它们.

Qua*_*noi 5

如果所有id都是自动增量整数,则可以添加tenant_id哪个不是主键的一部分,只需在所有查询中检查它.

但是,这有几个副作用,您可能会或可能不会将其视为缺点:

  • 您可以在多对多链接表中链接来自不同租户的两个实体,并且FOREIGN KEY约束不会阻止您这样做(因为它会成为tenant_id其中的一部分PRIMARY KEY)
  • 您的用户可以评估ID中有多少其他租户
  • 您还必须将实体表加入到搜索中,这些搜索可能只能从多对多链接表中进行(以检查租户)

换句话说,如果您真的不喜欢实体的复合键,则可以在没有它们的情况下设计数据库.