2016-07-05 42 views
0

来自sql背景。当我想根据用户的某些属性限制对数据的访问时,我可以创建一个视图并将该视图用作过滤器,以根据视图中的条件限制用户看到的数据。这种方法依赖于关系,迄今为止它已经为我工作。看看NoSql以及战略和概念的转变,我对如何实现这种认识NoSql的本质感到困惑。什么是NoSql方法来解决这个问题?当用户只根据用户类型查询特定行时?例如,假设管理员可以查看特定组的所有记录,并且通用用户只能看到他们的记录以及组内公开的某些组级别项目,组照片,组消息等。我真的试图绕过我的脑海,不考虑SQL方法来解决这个问题,但我是NoSQL的新手,所以这一直是一个挑战。用于向数据行提供授权的NoSql策略​​

回答

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支持投影,则可以为不同的角色/组呈现不同角色/组的字段子集(这样,至少有一些处理是在数据库端完成的)。

我希望这会有所帮助,尽管这是一个迟到的答案。