我正在尝试使用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 实例上所有数据库的真正访问权限?
事实证明,这是由
mongodump
可执行文件和mongod
服务器之间的版本不匹配引起的。(我mongod
在 docker 容器中运行,我试图从容器外部的主机进行备份,该容器安装了不同版本的工具。)当我切换到
mongodump
服务器版本附带的版本时,它运行良好。