在mongodb中强制执行修订和/或修订更新

在mongodb中强制执行修订和/或修订更新,mongodb,accumulo,Mongodb,Accumulo,在Accumulo中,您可以强制执行授权和/或服务器端迭代器返回的记录 在MongoDb中,有什么机制来实施这种类型的安全性?我知道有用于聚合管道的$redact命令,但这依赖于用户限制自己的查询 此外,您如何强制某人不更新他们没有足够权限更新的文档?从2.6开始,MongoDB授权是收集级别,并控制用户可以执行的操作,而不是他们可以看到的文档。这意味着,例如,如果用户有权对集合执行find,则他们可以看到集合中的所有文档,并且无法隐藏特定文档 您可以通过向用户保留更新权限(例如,仅授予用户角色

在Accumulo中,您可以强制执行
授权
和/或服务器端迭代器返回的记录

在MongoDb中,有什么机制来实施这种类型的安全性?我知道有用于聚合管道的
$redact
命令,但这依赖于用户限制自己的查询


此外,您如何强制某人不更新他们没有足够权限更新的文档?

从2.6开始,MongoDB授权是收集级别,并控制用户可以执行的操作,而不是他们可以看到的文档。这意味着,例如,如果用户有权对集合执行
find
,则他们可以看到集合中的所有文档,并且无法隐藏特定文档

您可以通过向用户保留更新权限(例如,仅授予用户角色)来强制集合的更新权限


手册的第二部分还对MongoDB的安全模型进行了概念性概述。

因此,基本上,答案是“不,没有办法控制对数据的访问(收集)。要么全有,要么什么都没有。在这一点上,您有幸编辑了您不应该看到的文档。”正如我所描述的,使用基于角色和权限的安全模型绝对有办法控制对集合的访问。如果您对集合具有读取权限,并且直接连接到数据库,则可以查看集合中所有文档的所有部分。但是,如图所示,例如,您可以使用中间件和$redact来控制对部分文档的访问。因此,正如您所说,您不能在DB(如Accumulo)中实现这一点。你必须有一个中间件解决方案,你必须强迫人们。示例-我有一组员工记录。我希望团队领导能够看到他们下属的联系信息,但我不希望他们看到工资信息。人力资源部需要能够看到一切。两人都有读取权限,但团队领导可以查看薪资信息,除非我让他们通过代理。对于通用解决方案来说,这并不能很好地扩展。这两个组都会通过其他应用程序访问数据库,这些应用程序旁边可能有适当的中间件。这不是代理。就扩展而言,它只是构建在MongoDB上的应用程序的另一部分,并且以同样的方式扩展。没有什么特别糟糕的。如果您只控制数据库而不控制其他内容,但却负责实施文档级限制,并且无法信任或合理地与负责应用程序的人合作,而这些应用程序目前将在MongoDB中实施,那么MongoDB中当前的安全模型似乎不适合您。