隔离RethinkDB数据库中的客户

时间:2015-08-29 23:41:22

标签: database clojure rethinkdb rethinkdb-javascript

我正在寻找在数据隔离的客户之间实现共享RethinkDB集群的策略。

我希望有多个客户使用共享的RethinkDB集群,但我不确定如何强制分离数据。客户请求不受信任,但他们应该使用RethinkDB API完全访问自己的数据。

它看起来像是多租户数据库的经典案例(我不确定),但我无法找到有关如何使用RethinkDB执行此操作的足够信息。

另一个想法:也许我也可以创建一个包装器并为每个表添加一个customerID前缀,但是他们能够绕过它吗?有没有办法做r.db('customerID')之类的其他查询无法更改的内容?这取决于特定的驱动程序吗?

如何隔离RethinkDB中的客户?

注意:我打算在重要的情况下使用https://github.com/apa512/clj-rethinkdb,但我也会接受使用JavaScript的任何答案。

1 个答案:

答案 0 :(得分:1)

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

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

  

也许我也可以创建一个包装器并为每个表添加一个customerID前缀,但是他们能够绕过那个

没有什么可以阻止的,Auth密钥是为已登记的群集共享的。

  

有没有办法像r.db(' customerID')那样在查询的其余部分无法更改

不确定,但此刻我认为不可能。

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

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

您可能想在compose.io,redistogo.com上注册一个帐户并尝试猜测他们是如何做到的,因为他们的每个客户都有自己的数据。它们与我认为的情况非常相似。