2015-04-23 72 views
2

我有一個使用身份驗證的遠程數據庫,沒有使用本地數據庫。我試圖複製一個數據庫表格遠程到本地使用:複製數據庫時不對管理員數據庫進行身份驗證

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

nonce是之前創建像文檔中所述。 johndoe用戶存在於管理數據庫中,並且有權創建和編寫像「aaa」這樣的新數據庫。當我嘗試將數據庫與上面的命令副本,我得到一個

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

和日誌打印

Failed to authenticate [email protected] with mechanism MONGODB-CR: AuthenticationFailed UserNotFound Could not find user [email protected] 

對於我來說,似乎複製命令使用fromDB作爲源用戶認證。是否可以單獨定義auth db?

回答

0

您需要在目標服務器的管理數據庫中運行copydb。

+0

我做到了。我最終在源數據庫中創建了一個臨時用戶,並在成功複製後將其刪除。 – Andreas

1

沒有呢,可惜這是不可能的,因爲每蒙戈的Documentation

當鑑定到fromhost例如,COPYDB使用fromdb爲指定用戶

認證數據庫

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

就我個人而言,我想出了轉儲/恢復命令將數據庫複製到另一臺機器。例如,複製遠程DB爲localhost:

  1. 轉儲目標DB轉儲/目錄:

    $ mongodump -u DB_USERNAME -p DB_PASSWORD --authenticationDatabase admin --db DB_NAME --host HOST.EXAMPLE.COM --port 27017 
    
  2. 從轉儲/ DB_NAME還原數據庫:

    $ mongorestore --db DB_NAME --host localhost --port 27017 --dir dump/DB_NAME/ 
    

你臨時解決方案用戶也肯定會工作,我只是不想以任何方式觸摸遠程數據庫