如何为 Cassandra 中的角色提供 'only insert' 特权?

How to provide 'only insert' privilege to a role in Cassandra?

我正在 Cassandra 中创建一个键空间,我想提供不同的权限,例如仅插入和更新、仅删除等。 Cassandra 整体提供 MODIFY 权限。但是我找不到任何资源来说明如何满足我的要求。

截至目前,例如,如果角色 'clerk' 只能插入,我计划向 'clerk' 提供修改权限并编写触发器以避免从该角色删除。

这感觉就像一个迂回的旅行。这是一个好方法吗?能否以更好或更直接的方式完成?

这是不可能的根本原因。 Cassandra 声名鹊起的原因之一是其非常高效的写入,即使在 slow-seeking 旋转磁盘上也是如此。这是通过只写入连续的磁盘文件来实现的——无需先读取以前版本的数据。这样做的后果之一是,在 Cassandra 中,INSERT 和 UPDATE 操作完全相同(关于空行实际上有一个区别,但本次讨论并不有趣)。这两个操作都可以创建一个新项目, 修改一个现有项目,Cassandra 在写入时不知道是哪个 - 它只会在很久以后才弄清楚,而 压缩新旧数据在一起。

特别是这意味着您不能拥有添加新数据修改现有数据的单独权限,因为在write Cassandra 无法在不牺牲性能的情况下判断是否有 pre-existing 数据。除了性能之外,在分布式设置中还有一个正确性问题——如果两个客户端同时向同一行写入新数据,并且都只允许写入新数据而不能覆盖旧数据,你会期望发生什么?

出于同样的原因,对行或分区的DELETE操作拥有单独的权限也是毫无意义的。问题是,也可以使用 UPDATE 或 INSERT 操作删除数据:可以将数据更新为空,或将其更新为 TTL(过期时间)为 0,或用其他数据覆盖数据。因此,仅禁止实际的 "DELETE" 操作几乎不能防止任何事情发生。