在 RethinkDB 数据库中隔离客户

Isolate customers in RethinkDB database

我正在寻找一种策略来在具有数据隔离的客户之间实施共享的 RethinkDB 集群。

我希望有多个客户使用共享的 RethinkDB 集群,但我不确定如何强制执行数据分离。客户的请求不可信,但他们应该可以使用 RethinkDB API.

完全访问自己的数据

它看起来像是多租户数据库的经典案例(我不确定),但我找不到足够的信息来说明如何使用 RethinkDB 做到这一点。

另一个想法:也许我也可以制作一个包装器并在每个 table 前加上一个 customerID,但他们能绕过它吗?有没有办法做一些像 r.db('customerID') 这样在查询的其余部分不能改变的事情?这取决于特定的驱动程序吗?

如何隔离 RethinkDB 中的客户?

注意: 我打算使用 https://github.com/apa512/clj-rethinkdb 以防万一,但我也接受使用 JavaScript 的任何答案。

我认为这是一个开放式问题。 RethinkDB 身份验证只需要一个 Auth Key。基本上,据我所知,它共享整个服务器数据,甚至跨数据库。

因此,对于您的情况,我认为最好 运行 多个 docker 来隔离数据。每个客户也有自己的 IP 地址来连接,还有他们自己的身份验证密钥,当然还有他们自己的数据。

maybe I could also make a wrapper and prefix every table with a customerID, but would they be able to bypass that

没有什么可以阻止,整个集群共享 Auth 密钥。

Is there a way to do something like r.db('customerID') that cannot be changed in the rest of the query

不确定,但我认为目前不可能。

看起来使用单独的 RethinkDB 实例,使用像 Docker 这样的解决方案是可行的方法。

创建新客户时,启动 RethinkDB docker 容器,将 RethinkDB 端口映射到主机上可用的随机端口。并将那些 host:port URI 字符串提供给客户。

您可能想在 compose.io、redistogo.com 上注册一个帐户并尝试猜测他们是如何注册的,因为他们的每个客户都有自己的数据。而且我觉得和你的情况很像。