2016-11-25 21 views
0

我做蒙戈DB Java方面的發展,並希望連接到蒙戈DB實例。我從這個鏈接http://mongodb.github.io/mongo-java-driver/3.0/driver/reference/connecting/authenticating/讀取認證部分。它具有以下用於認證的方法。如何蒙戈DB與用戶名和密碼,但沒有數據庫名稱連接在Java中

MongoCredential credential = MongoCredential.createCredential(user, 
                   database, 
                   password); 

上面的代碼工作正常,但我需要首先知道數據庫名稱。如何在不指定數據庫的情況下連接到MongoDB?我想連接到它並返回用戶選擇的數據庫列表。

+1

這裏的數據庫無關,你要工作數據庫。它是驗證的來源。 「數據庫 - 用戶定義的數據庫」。 –

+0

我仍然沒有得到你。當試圖連接到Mongo DB時,我應該使用的數據庫的價值是什麼? –

回答

0

如這裏所提到的,在MongoDB的認證總是做對源 - 可以是外部的 - 但它通常是一個數據庫名稱。

當你創建一個用戶,它被保存在admin分貝稱爲​​專門收集。因此,當你創建你第一個用戶是隱式創建的admin分貝。

當您想要列出數據庫時,無論是通過shell幫助程序show dbs還是數據庫驅動程序,listDatabases命令都在幕後調用。

如果啓用身份驗證,以執行該命令,你必須與其中包括listDatabases特權操作預定(或自定義)角色的用戶。

很少有內建xxxAnyDatabase角色 - 例如readAnyDatabase角色 - 其中包括listDatabases特權操作。

如果要創建具有任何xxxAnyDatabase角色的用戶,必須在管理數據庫中完成。

所以,做一個長話短說,如果你想列出數據庫:

  1. 你唯一的選擇是admin數據庫作爲身份驗證源
  2. 用戶必須有足夠的作用:readAnyDatabasereadWriteAnyDatabasedbAdminAnyDatabase(或超級用戶角色,如root
-1
mvn archetype:generate -DgroupId=com.mkyong.core -DartifactId=mongodb -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false 
+0

我完全看不出這個答案是如何連接的問題... – mtj

0

您無法連接不指定數據庫,爲用戶在數據庫中定義的。如果你還沒有明確選擇您在其中創建您的用戶數據庫,正確的(默認)數據庫名是「admin」。

這樣:

MongoCredential credential = MongoCredential.createCredential("myuser", 
                  "admin", 
                  "secret"); 

...應該做的工作。

相關問題