如何为MongoDB实现字段级权限?

时间:2017-04-21 15:00:14

标签: mongodb

在MySQL中,我可以授予更新特定字段的权限:

GRANT SELECT, UPDATE (col_Eagle) ON db_ANIMAL.tb_BIRD to 'JOHNNY'@'localhost';

MongoDB只有"读"或" readWrite"作用:

db.createUser(
    {
      user: "JOHNNY",
      pwd: "pass",
      roles: [
        { 
          role: "read", # or readWrite??
          db: "db_ANIMAL" 
        }
      ]
    }
)

如何限制MongoDB 3.4中特定字段的更新权限?

2 个答案:

答案 0 :(得分:4)

与MongoDB 3.4一样,内置访问控制的粒度仅为Collection-Level Access Control

例如,您可以为集合创建用户定义的角色限制权限:

privileges: [
  { resource: { db: "db_ANIMAL", collection: "tb_BIRD" },  actions: [ "find", "update" ] }
]

为了限制对集合数据子集的只读访问,您可以考虑使用MongoDB 3.4中的新Views功能或使用$redact聚合阶段实现Field Level Redaction(MongoDB 2.6) +)。

如果您需要对字段级更新进行更细粒度的访问控制,那么您当前必须在API或应用程序代码中实现此功能。

您可能希望在MongoDB问题跟踪器中观看/提升一些相关功能请求:

答案 1 :(得分:0)

我刚刚针对此主题创建了一个 post in MongoDB's forums,MongoDB 员工向我指出了解决方案。

要为最终用户(与直接访问数据库的应用程序交互的用户)实现字段级权限,现在可以使用 MongoDB Realm 来完成,如解释在 documentation 中。