Cassandra 作为基于角色的访问控制系统的数据库

标签 cassandra

我想知道您对使用 Cassandra 实现 类似 RBAC 的身份验证和授权模型。我们简化了 一般模型的中心关系 (http://en.wikipedia.org/wiki/Role-based_access_control) 至:

用户 ---n:m--- 角色 ---n:m--- 资源

用户和资源使用外部可见的标识符进行索引。 这些标识符也需要“可重新拥有”(例如:邮件别名)。

考虑 Cassandra 的主要原因是可用性、可扩展性 和(全局)地理冗余。这是 RBDMS 很难实现的。

另一方面,RBAC 有许多 m:n 关系。虽然有些 资源所有权(即角色=所有者)的不一致是可以接受的 绝对不能混淆。

你觉得怎么样?这种关系模型是 Cassandra 的反模式吗 用法?您知道基于 Cassandra 的类似解决方案吗?

最佳答案

我将继续将我的评论转化为答案,以便它们位于一个位置。

虽然您有一个听起来很大的数据集,如果我没看错的话,有 100,000,000 个帐户需要管理,但您还面临着需要强制执行某种程度的一致性以确保特定关系永远不会不同步的限制。您还可能遇到需要强制执行的大量一对多关系(资源-->用户或上面的 m:n)的情况。此外,听起来您将从数据集中读取的内容比写入数据的内容多。随后,我认为具有热备份的 RDBMS 会比自定义 Cassandra 部署更好地解决您的问题。 其背后的原因是:

  1. RDBMS 中的一对多关系可以表示为跨表连接的 SQL 语句,并且您只需存储数据一次。在 Cassandra 中,根据设置,您必须将相同的信息存储在多个位置才能正确反射(reflect)关系。这将导致一个相当困惑和冗余的数据模型。

  2. 一致性——Cassandra 最终是一致的,恕我直言,这在处理大多数类型的数据时都很好。然而,在处理安全性等需要始终保持一致性的问题时,RDBMS(复数?)在事务方面具有显着优势,可以确保数据始终保持同步。从安全角度来看,我认为有些事情很重要。

  3. 读取速度——在 RDBMS 中使用索引将显着加快从数据库中读取数据的速度,因此在您根据经验确定这将是一个重大瓶颈之前,我不会将其作为驱动决策因素。在某些方面,Cassandra 的仲裁读取模型可能会更慢,因为您必须等待 N 台机器(其中 N >= 1)返回答案,并在答案不同步时更正该答案。

  4. 冗余——具有热备份(主主复制)的 RDBMS 可以解决冗余问题。

Cassandra 是一个很棒的工具,我喜欢使用,但是,在这种情况下,我认为您的模型与 RDBMS 的配合比与 Cassandra 的配合更好。

祝你好运!

关于Cassandra 作为基于角色的访问控制系统的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9768549/

相关文章:

java - Cassandra 抛出 OutOfMemory ;怎么调?

cassandra - CQL 检查记录是否存在

hadoop - 如何向Storm实时输入

cassandra - Stargate 可以与物化 View 一起使用吗?

cassandra - 在 cassandra 中复制

java - 使用 cassandra-jdbc 驱动程序从列族检索数据时出错

所有字段均为 PK 的 Cassandra 表

java - Spring Boot 不记录 CQL 查询

java - 通过删除重复代码高效插入数据库

java - Cassandra - 将一个大字段设置为 null 不归还磁盘空间