来自sql背景。当我想根据用户的某些属性限制对数据的访问时,我可以创建一个视图并使用该视图作为过滤器,根据视图中的条件限制用户看到的数据。这种方法依赖于关系,到目前为止它对我有用。看看NoSql以及策略和概念的转变,我很困惑如何实现这个探讨NoSql的本质。对于像这样的问题,NoSql方法是什么?当用户根据用户类型只知道某些行时?例如,假设管理员可以查看特定组的所有记录,并且通用用户只能看到他们的记录以及组内公开的某些组级别项目,组照片,组消息传递等。我真的试图围绕这个问题的sql方法思考,但我是NoSql的新手,所以这是一个挑战。
答案 0 :(得分:0)
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支持投影,则可以为不同的角色/组呈现列/字段的子集(这样,至少一些处理在db端完成)。
我希望这会有所帮助,尽管这是一个迟到的答案。