mongo和mongodump与auth一起使用但恢复不

时间:2016-01-14 20:53:42

标签: mongodb shell terminal

管理员用户权限:

db.getUsers()
[
    {
        "_id" : "admin.myself",
        "user" : "myself",
        "db" : "admin",
        "roles" : [
            {
                "role" : "userAdminAnyDatabase",
                "db" : "admin"
            },
            {
                "role" : "dbAdmin",
                "db" : "reports"
            },
            {
                "role" : "dbAdmin",
                "db" : "places"
            }
        ],
        "customData" : {

        }
    }
]

我能够对我的远程mongo db进行身份验证,例如,

mongo --host <hostname> -u "myself" -p "myself" --authenticationDatabase "admin"

我也可以远程执行转储,例如

mongodump --host <hostname> --port 27017 --username "myslef" --password "myself" --out home/myself/mongodb-backup

但是当我修改db上的某个集合并尝试像下面的代码一样恢复它时,它不起作用并抛出auth错误。

mongorestore --host <hostname> -u "myself" -p "myself" home/myself/mongodb-backup/

错误:

Failed: error getting auth version of server: not authorized on admin to execute command { getParameter: 1, authSchemaVersion: 1 }

2 个答案:

答案 0 :(得分:2)

Mongo backup docs建议使用backup role创建特定用户,使用restore role创建另一个用户。

大概使用具有restore角色的用户,或者向您正在使用的用户授予restore角色可以解决您的问题。

db.createUser({
    user: "myself", pwd: "8eUEkdiKlP",
    roles: [{role: "readWrite", db: "admin"}]
});

虽然第一个链接确实提到了在尝试恢复system.profile集合时需要一些额外的权限。

答案 1 :(得分:0)

您应该像这样将root角色添加到您的管理员

db.grantRolesToUser( "myAdmin", [ "root" ])

只有在此之后,您才能从备份中还原