我正在计划一个带有nodejs和sequelize(mysql方言)的多租户应用程序。我将为每个客户提供一个应用程序和多个数据库。我需要在身份验证后使用passport.js连接到客户端数据库。因此,有一个经典的主数据库,包含客户端信息和db user,host和pwd,然后在成功登录后,应用程序连接到特定的客户端数据库。我怎么能这样做?我正在考虑使用会话...也许是一个中间件,每个请求获取会话然后将数据传递给sequelize配置对象?任何人都可以与我分享他/她如何设法做类似的事情吗?我陷入了逻辑陷阱!谢谢
答案 0 :(得分:1)
你非常接近。
当您在主数据库中查找用户时,为了验证用户名/密码,您还将查找到用户特定数据库的连接字符串。然后,您可以创建一个简单的快速中间件函数,以在每个请求开始时打开特定的连接。
您需要数据库的用户名和密码。为了最好的安全性,他们不与用户相同。用户名和密码:如果有人破解了您的网络应用和用户表,您就不希望他们拥有所有密码。
但是,你建议的不是经典的多租户。多租户正在创建一个单独的数据库,其中各个表都有列,提到他们所针对的用户。然后,一旦护照告诉您用户的ID,您就可以将其放入查询中(例如SELECT .... WHERE user_id = <<value>> AND ...
。
您的提案可以为几十个用户提供良好的效果。但是如果你有成千上万的用户会怎么样?那将是很多独立的数据库。