复制数据库时不验证admin db

时间:2015-04-23 11:06:01

标签: mongodb authentication copy database

我有一个使用身份验证的远程数据库和没有的本地数据库。我尝试使用以下方法将远程数据库表单复制到本地:

{ "copydb" : "1" , "fromdb" : "aaa" , "todb" : "aaa-test" , "fromhost" : "remotehost:27017" , "username" : "johndoe" , "nonce" : "2aa39a862a92bea6" , "key" : "2bbfe213664310fb7c36bf7f41195b81"}

nonce是在文档中声明之前创建的。 johndoe用户存在于admin数据库中,有权创建和编写像“aaa”这样的新数据库。当我尝试使用上面的命令复制数据库时,我得到了一个

{ "serverUsed" : "localhost:27020" , "ok" : 0.0 , "errmsg" : "unable to login { ok: 0.0, errmsg: \"auth failed\", code: 18 }"}

并且日志正在打印

 Failed to authenticate johndoe@aaa with mechanism MONGODB-CR: AuthenticationFailed UserNotFound Could not find user johndoe@aaa

对我来说,复制命令似乎使用fromDB作为用户身份验证的来源。是否可以单独定义auth db?

2 个答案:

答案 0 :(得分:1)

不,不幸的是,根据Mongo的Documentation

,这是不可能的
  

在对 fromhost 实例进行身份验证时, copydb 使用 fromdb 作为指定用户的身份验证数据库

与copyDatabase()命令相同的故事。

就个人而言,我想出了dump / restore命令来将数据库复制到另一台机器上。例如,要将远程数据库复制到localhost:

  1. 将目标数据库转储到转储/目录:

    $ mongodump -u DB_USERNAME -p DB_PASSWORD --authenticationDatabase admin --db DB_NAME --host HOST.EXAMPLE.COM --port 27017
    
  2. 从dump / DB_NAME恢复数据库:

    $ mongorestore --db DB_NAME --host localhost --port 27017 --dir dump/DB_NAME/
    
  3. 您使用临时用户的解决方法也可以肯定,我只是不想以任何方式触摸远程数据库

答案 1 :(得分:0)

您需要在目标服务器的admin数据库中运行copydb。