无法使用Robot 3T在MongoDB中基于集合级别角色的访问中执行listCollections

时间:2018-08-01 08:17:29

标签: mongodb robo3t

我已在MongoDB数据库上启用了集合级别访问。我希望我的用户在从Robo3T连接时访问数据库中他们自己的集合(而不是其他人)。但是,连接到数据库后,Robo 3T将不允许浏览收藏夹列表并弹出以下错误:

错误:

  

ListCollections失败:{好的:0.0,errmsg:“未授权   DssScheduler执行命令{listCollections:1,过滤器:{},   光标:{},$ readPreference:{模式:“ secondaryPreferred”},$ db:   ...”,代码:13,代号:“未经授权”}

因此,我尝试按如下所示设置数据库特权:

db.createRole({ role: "collAReadWrite", 
    privileges: [ 
        { resource: 
            { db: "MyDB", collection: "collA" 
            }, 
            actions: ["find","insert","update","remove"] 
        },
        { resource: 
            { db: "MyDB", collection: "collB" 
            }, 
            actions: ["find"] 
        },
        { resource: 
            { db: "MyDB", collection: "collC" 
            }, 
            actions: ["find"] 
        }   
    ], 
    roles: [] 
})

我希望这能起作用,因为我为用户提供了所有集合的读取权限,但仅对collectionA进行了写入权限。之后,我使用以下命令为用户分配了上述角色:

db.createUser(
  {
    user: "collAUser",
    pwd: "collAUserPassxxxxxxx",
    roles: [ { role: "collAReadWrite", db: "MyDB" } ]
  }
)

Still Robo 3T弹出相同的错误。

希望对此有任何帮助!

2 个答案:

答案 0 :(得分:0)

由于MongoDB 4.0中的更改,恳请运行MongoDB 4.0+服务器实例的Studio 3T或Robo 3T用户遇到不完整的收藏列表,请查看相应的MongoDB数据库用户帐户的特权。

请确保已分配了足够的特权-允许用户列出数据库的集合。一种可能的解决方法是更新用户角色,以包括在数据库上运行操作/操作“ listCollections”的特权。

答案 1 :(得分:0)

将以下内容添加到权限[]。

{ resource: 
    { db: "MyDB", collection: "" }, 
      actions: ["listCollections"] } 
}

列出集合将显示数据库中的所有集合,而不仅仅是用户有权访问的集合。