我已在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弹出相同的错误。
希望对此有任何帮助!
答案 0 :(得分:0)
由于MongoDB 4.0中的更改,恳请运行MongoDB 4.0+服务器实例的Studio 3T或Robo 3T用户遇到不完整的收藏列表,请查看相应的MongoDB数据库用户帐户的特权。
请确保已分配了足够的特权-允许用户列出数据库的集合。一种可能的解决方法是更新用户角色,以包括在数据库上运行操作/操作“ listCollections”的特权。
答案 1 :(得分:0)
将以下内容添加到权限[]。
{ resource:
{ db: "MyDB", collection: "" },
actions: ["listCollections"] }
}
列出集合将显示数据库中的所有集合,而不仅仅是用户有权访问的集合。