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" 权限。
我正在尝试创建一个允许 - 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" 权限。