我有一个使用身份验证的远程数据库和没有的本地数据库。我尝试使用以下方法将远程数据库表单复制到本地:
{ "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?
答案 0 :(得分:1)
不,不幸的是,根据Mongo的Documentation:
,这是不可能的在对 fromhost 实例进行身份验证时, copydb 使用 fromdb 作为指定用户的身份验证数据库
与copyDatabase()命令相同的故事。
就个人而言,我想出了dump / restore命令来将数据库复制到另一台机器上。例如,要将远程数据库复制到localhost:
将目标数据库转储到转储/目录:
$ mongodump -u DB_USERNAME -p DB_PASSWORD --authenticationDatabase admin --db DB_NAME --host HOST.EXAMPLE.COM --port 27017
从dump / DB_NAME恢复数据库:
$ mongorestore --db DB_NAME --host localhost --port 27017 --dir dump/DB_NAME/
您使用临时用户的解决方法也可以肯定,我只是不想以任何方式触摸远程数据库
答案 1 :(得分:0)
您需要在目标服务器的admin数据库中运行copydb。