具有节点和续集的多租户结构

smdncfj3  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(329)

我计划用nodejs和sequelize(mysql方言)开发一个多租户应用程序。我会有一个单一的应用程序和多个数据库为每个客户端。我需要在身份验证后连接到客户端数据库(使用passport.js)。因此有一个经典的主数据库,包含clients info和db user、host和pwd,然后在成功登录之后,应用程序连接到特定的client db。我怎么能做这种事?我在考虑使用sessions…也许是一个中间件,它可以为每个请求获取session,然后将数据传递给sequelize config对象?有谁能和我分享一下他/她是如何做到类似的事情的?我被困在逻辑陷阱里了!谢谢您

hs1ihplo

hs1ihplo1#

你很接近。
在主数据库中查找用户时,为了验证用户名/密码,还将查找特定于用户的数据库的连接字符串。然后您可以创建一个简单的express中间件函数,在每个请求的开头打开特定的连接。
您将需要数据库的用户名和密码。为了获得最佳安全性,它们不应该与用户的用户名和密码相同:如果有人破解了您的web应用程序和用户表,您不希望他们拥有所有的密码。
但是,你提出的并不是经典的多租户。multitenancy是创建一个单一的数据库,其中的各个表都有列,列中提到了它们所针对的用户。一旦passport告诉您用户的id,您就可以将其放入查询中(例如, SELECT .... WHERE user_id = <<value>> AND ... .
你的建议对几十个用户来说可以接受。但是如果你有成千上万的用户会怎样呢?那将是许多独立的数据库。

相关问题