我正在计划一个带有 nodejs 和 sequelize(mysql 方言)的 Multi-Tenancy 应用程序。我将为每个客户提供一个应用程序和多个数据库。我需要在身份验证后连接到客户端数据库(使用passport.js)。所以有一个经典的主数据库,其中包含客户端信息和数据库用户、主机和密码,然后在成功登录后应用程序连接到特定的客户端数据库。我怎么能做这样的事情?我正在考虑使用 session ......也许是一个中间件,为每个请求获取 session 然后将数据传递给 Sequelize 配置对象?谁能与我分享他/她如何设法做类似的事情?我陷入了一个逻辑陷阱!谢谢

最佳答案

你很亲近。

当您在主数据库中查找用户时,为了验证用户名/密码,您还将查找用户特定数据库的连接字符串。然后就可以创建一个简单的express中间件函数,在每个请求开始的时候打通具体的连接。

您将需要数据库的用户名和密码。为了获得最佳安全性,它们不应该与用户的用户名和密码相同:如果有人破解了您的 Web 应用程序和用户表,您不希望他们拥有所有密码。

但是 ,您提出的不是经典的 Multi-Tenancy 。 Multi-Tenancy 正在创建一个单一的数据库,其中的各个表都有列提到它们是针对哪个用户的。然后,一旦 Passport 告诉您用户的 ID,您就可以将其放入您的查询中(例如, SELECT .... WHERE user_id = <<value>> AND ...

您的建议对于几十个用户来说效果还算不错。但是如果你有成千上万的用户会发生什么?那将是很多独立的数据库。

关于mysql - 具有 Node 和 Sequelize 的 Multi-Tenancy 结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50191825/

10-10 23:43