限制客户端的Cassandra查询语法

时间:2017-12-23 09:18:04

标签: cassandra cassandra-3.0

我们计划使用Cassandra 3.x,我们希望允许客户直接连接到Cassandra,以便将数据导出到他们的数据仓库中。 它们将通过ODBC从远程连接。

有没有办法阻止客户执行会导致所有节点负载过高的巨大或错误的SELECT语句?我们在复制策略中使用额外的数据中心,只有客户可以连接,因此实时系统不会受到影响。但我们希望设置一些将在此 shadow 系统上运行的工作程序。最重要的是,连接的远程客户端不会对其他远程连接或本地工作人员作业产生任何明显影响。已有物化视图,我想强制客户仅基于主键获取数据(即禁止使用ALLOW FILTERING)。如果可以限制返回的行数(例如100万)以防止所有数据的拉动,那也会很棒。

此用例是否有最佳做法?

我知道与C *中的多租户策略相关的BlackRocks视频,建议在架构中使用tenant_id。这就是我们已经在做的事情,但是如何通过ODBC连接的租户/客户确保安全/隔离?或者我是否必须自己编写一个处理安全性的API?

1 个答案:

答案 0 :(得分:1)

我建议通过API公开访问,而不是通过ODBC公开 - 至少你可以更好地控制执行的内容,强制执行tenant_id,以及其他检查,例如限制等。你可以尝试使用Cassandra&#39 ;用于分解查询的CQL解析器,并将所有必需的东西都放回去。

理论上,您可以使用Apache Calcite,例如。它具有可以使用的JDBC驱动程序的实现,此外还有现有的Cassandra adapter可以修改以完成任务(将身份验证映射到tenant_ids等),但这将是相当多的工作。