我正在为我们的客户设计一个 Web 应用程序,其中每个客户都有一个进入系统的唯一门户。每个客户都需要能够管理他们自己的一组用户,而不用关心其他客户的用户,因此两个不同的客户都需要能够拥有一个用户 jasonsmith。
同时,一个客户表明不知道另一个客户的存在,也不知道这是一个多客户系统。
今天实施这样一个系统的标准是什么?我应该去哪里了解更多关于如何最好地实施这样一个系统的信息。
我正在为我们的客户设计一个 Web 应用程序,其中每个客户都有一个进入系统的唯一门户。每个客户都需要能够管理他们自己的一组用户,而不用关心其他客户的用户,因此两个不同的客户都需要能够拥有一个用户 jasonsmith。
同时,一个客户表明不知道另一个客户的存在,也不知道这是一个多客户系统。
今天实施这样一个系统的标准是什么?我应该去哪里了解更多关于如何最好地实施这样一个系统的信息。
您所说的称为多租户。
有几种方法可以解决这个问题。
最常见的方法是:
单一数据库
所有租户共享同一个数据库。因此,您将拥有一张包含所有租户信息的租户表。所有其他表都使用租户 ID 作为外键。
问题是您必须确保用户只能访问自己的信息(例如,用户可以尝试更改 uri 中的 id)。因此,您必须验证用户尝试访问的每个对象。
多个数据库
一些数据库引擎(如 RavenDB)可以毫无问题地处理多个数据库。这意味着每个客户都有自己的数据库(在用户被识别后,您在每个请求开始时加载该数据库)。
因此,在身份验证期间您将拥有一个数据库用户,以便能够识别租户和每个客户一个数据库。
这个解决方案的好处是租户不可能访问彼此的数据库。(除非他们已经入侵了该帐户)