2016-11-25 63 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"); 

...应该做的工作。

相关问题