我正在尝试使用 在 mongoDB 实例(版本 4.4)上设置备份mongodump
。这需要访问config
数据库,而我的 mongo 用户尽管担任该角色,却没有该权限root
。(据我了解内置角色的文档,具有该角色的用户root
应该能够备份实例上的所有数据库。)
当我尝试运行时mongodump
,出现此错误:
root@mongo-db1:/srv/mongo# mongodump --username=rcroot --password="secret" --out=/var/backups/20200925
2020-09-26T05:40:20.138+0000 Failed: error counting config.system.indexBuilds: not authorized on config to execute command { count: "system.indexBuilds", query: {}, $readPreference: { mode: "secondaryPreferred" }, $db: "config" }
显然我的用户无权访问config
。这是我的用户:
rs0:PRIMARY> db.getUser("rcroot")
{
"_id" : "admin.rcroot",
"userId" : UUID("81fc86ff-6d12-4d23-83ab-7fc2591516a2"),
"user" : "rcroot",
"db" : "admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
},
{
"role" : "root",
"db" : "admin"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
如果我以 root 用户身份登录到mongo
shell 并尝试访问config
数据库中的任何内容,我会收到与上述类似的错误。我确实启用了身份验证,因为我mongod
从以下--auth
标志开始:
mongod --auth --replSet rs0 --keyFile /data/db/keyfile --enableMajorityReadConcern false
所以我的问题是:我需要做什么才能授予该用户root
对我的 mongo 实例上的所有数据库的真正访问权限?
答案1
事实证明,这是由于mongodump
可执行文件和mongod
服务器之间的版本不匹配造成的。(我在 docker 容器中运行mongod
,并尝试从安装了不同版本工具的容器外部的主机进行备份。)
当我切换到mongodump
服务器版本附带的版本时,它运行良好。