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

MongoDB How to create a User with ReadWriteAnyDatabase role but exclude the admin database

我正在尝试创建一个允许 - read/write 在任何数据库上 - 允许在任何数据库上使用 collMod - 允许在任何数据库上创建集合 - 在管理数据库上只读

我尝试了以下方法

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 }

如果您授予用户 "readWriteAnyDatabase" 角色,则不能排除 admin 数据库。因此,解决方案是将 "readWrite" 角色授予所有其他数据库,但用户无法创建新数据库。

您可以创建脚本(循环;forEach())列出所有数据库(不包括管理、本地、配置)并授予用户 "readWrite" 权限。