为数据行提供授权的NoSql策略

本文关键字:NoSql 策略 授权 数据 | 更新日期: 2023-09-27 17:54:55

来自sql背景。当我想要根据用户的某些属性限制对数据的访问时,我可以创建一个视图,并使用该视图作为过滤器,根据视图中的标准限制用户看到的数据。这种方法依赖于人际关系,到目前为止,它对我很有效。看看NoSql以及策略和概念的转变,考虑到NoSql的本质,我对如何实现这一点感到困惑。对于这样的问题,NoSql的方法是什么?当用户根据其用户类型只能访问某些行时?例如,假设管理员可以查看特定组的所有记录,而普通用户只能查看他们的记录以及组内公开的某些组级项目、组照片、组消息等。我一直在努力不去想用sql的方法来解决这个问题,但我对NoSql很陌生,所以这对我来说是个挑战。

为数据行提供授权的NoSql策略

NoSQL数据库在概念上与关系数据库在许多方面不同。授权和安全性通常不是他们的主要关注点。但是,它们中的大多数都是在这个领域发展起来的,它们具有细粒度的授权。基本上,它依赖于一个特定的数据库。

例如,Cassandra在计划中具有列级权限(https://issues.apache.org/jira/browse/CASSANDRA-12859), HBase具有单元级权限(https://www.cloudera.com/documentation/enterprise/5-8-x/topics/cdh_sg_hbase_authorization.html)。另一方面,MongoDB通常是无模式的,它有不同的(更复杂的)面向文档的数据模型,这使得很难实现低级访问控制。此外,MongoDB有视图。

因此,如果您正在使用的DBMS没有预期级别的内置授权,则必须在与db交互的应用程序中实现(如果有多个应用程序,事情可能会变得棘手,并且必须建立一些使用规则)。使用非规范化模型是很常见的事情,因此不同的角色/组可以与不同的表/集合交互,这些表/集合包含只有该角色/组可以看到的数据(基本上,它是RDBMS视图的模拟)。这种非规范化的方法通常占用更多的空间,并且需要保持副本同步。如果DBMS支持投影,则可以为不同的角色/组呈现列/字段的子集(这样,至少部分处理在数据库端完成)。

我希望这对你有帮助,虽然这是一个迟来的回答。