在服务器调用期间将用户路由到正确的数据库

时间:2018-01-14 17:10:18

标签: database security authentication web-applications architecture

我想在我的Web应用程序中为不同的团队创建不同的环境。 为此,我想为每个团队创建一个独特的数据库(但在同一台服务器上),并且只保留一个前端环境。

然后问题是我需要在每个用户执行对服务器的调用时将其路由到正确的数据库。

如果不将user / db映射存储在数据库中,我怎么能这样做?

我正在考虑在用于连接的JWT令牌中添加类似客户端ID的内容,并使用此ID命名每个数据库(然后我只需要连接到由相同客户端ID命名的数据库)但它不会'听起来不对。

我尝试这样做是因为我不想通过在所有表中添加client_id字段来修改我的所有应用程序:它很痛苦并且可能很危险(如果有错误,团队可以看到来自另一个的数据)。

该应用程序是为我的团队设计的,但该公司的另一个想要使用它。我尝试使其可用,而无需在每次有人想要访问它时部署一个单独的应用程序。 该应用程序应该能够知道使用哪个数据库来请求它。

1 个答案:

答案 0 :(得分:0)

假设您可以通过Id(在您的情况下为JWT令牌)识别每个用户,只需创建一个包含TOKEN和DATABASE两列的路由器表。此表将作为您的路由器。在DATABASE列中,使用标识您的团队数据库的数据,例如IP,端口,数据库名称或连接字符串。

当用户到来时,系统将使用令牌请求DATABASE列的值。如果您的路由器返回NULL,则表示它是用户的第一次访问;将正确的连接字符串分配给JWT令牌的DATABASE列,然后仅对所有数据库操作使用该连接。

通过检查已分配的团队数据库的总量,可以同等地分配连接字符串。

您可以在注册过程中修改ROUTER表,为新用户分配数据库。

请注意,术语“路由器表”不必是数据库表。您可以将这些数据保存在RAM中,也可以作为磁盘上任何位置的永久数据。