MongoDB如何创建具有ReadWriteAnyDatabase角色但排除管理数据库的用户

时间:2017-04-21 02:48:06

标签: mongodb user-roles mongodb-roles

我试图创建一个允许的扩展角色 - 在任何数据库上读/写 - 允许任何数据库上的collMod - 允许在任何数据库上使用createCollection - 只读管理员数据库

我尝试了以下

use admin
db.runCommand({ createRole: "_ReadWriteAnyDatabase",
  privileges: [
    { resource: { db: "", collection: "" }, actions: [ "collMod", "createCollection" ] }
  ],
  roles: [
    "readWriteAnyDatabase",
    { role: "read", db : "admin" }
  ]
})

然后我在admin数据库上创建了用户,因为我无法在备用数据库上创建用户

但我发现我可以在管理数据库中创建和删除集合

mongo admin -u user1 -p user1
db.createCollection('mycollection')
{ ok : 1 }
db.mycollection.drop()
{ ok : 1 }

1 个答案:

答案 0 :(得分:1)

如果您授予用户“readWriteAnyDatabase”角色,则无法排除admin DB。因此,解决方案是为所有其他数据库使用“readWrite”角色,但之后用户无法创建新数据库。

您可以创建脚本(循环; forEach())列出所有数据库(不包括admin,local,config)并向用户授予“readWrite”权限。