【问题标题】:How to connect Mongo DB with user and password but without database name in Java如何在Java中使用用户和密码但没有数据库名称连接Mongodb
【发布时间】:2016-11-25 00:07:10
【问题描述】:

我正在做 Mongo DB Java 端开发,并希望连接到 Mongo DB 实例。我从这个链接http://mongodb.github.io/mongo-java-driver/3.0/driver/reference/connecting/authenticating/ 阅读了身份验证部分。它具有以下用于身份验证的方法。

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

上面的代码工作正常,但我需要先知道数据库名称。如何在不指定数据库的情况下连接到 Mongo DB?我想连接它并返​​回数据库列表供用户选择。

【问题讨论】:

  • 这里的数据库与你要处理的数据库无关。它是身份验证的来源。 “数据库 - 定义用户的数据库”。
  • 我还是没有得到你。尝试连接 Mongo DB 时,我应该使用的数据库值是多少?

标签: java mongodb


【解决方案1】:

正如这里提到的,MongoDB 中的身份验证始终针对源进行 - 可以是外部的 - 但它通常是数据库名称。

无论何时创建用户,它都会保存在 admin 数据库中名为 system.users 的特殊集合中。因此,admin db 是在您创建第一个用户时隐式创建的。

当您想要列出您的数据库时,无论是通过 shell 帮助程序 show dbs 还是数据库驱动程序,都会在后台调用 listDatabases 命令。

如果您启用身份验证,要执行此命令,您必须是具有预定义(或自定义)角色的用户,其中包括 listDatabases 特权操作。

很少有内置的 xxxAnyDatabase 角色 - 例如 readAnyDatabase 角色 - 其中包括 listDatabases 特权操作。

如果您想创建具有任何 xxxAnyDatabase 角色的用户,则必须在 admin 数据库中完成。

所以,长话短说,如果您想列出数据库:

  1. 您唯一的选择是将admin 数据库作为身份验证源
  2. 用户必须具有足够的角色:readAnyDatabase、readWriteAnyDatabase、dbAdminAnyDatabase(或超级用户角色,例如root)

【讨论】:

    【解决方案2】:

    您不能在不指定数据库的情况下进行连接,因为用户是在数据库上定义的。如果您没有明确选择创建用户的数据库,则正确的(默认)数据库名称是“admin”。

    因此:

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

    ...应该做的工作。

    【讨论】:

      【解决方案3】:
      mvn archetype:generate -DgroupId=com.mkyong.core -DartifactId=mongodb -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-19
        • 2018-05-08
        • 2016-09-14
        • 2023-01-11
        • 2023-03-15
        • 1970-01-01
        • 2016-11-18
        • 2012-05-08
        相关资源
        最近更新 更多