【问题标题】:Mongo server accepts credentials from shell, but not from Java/Scala interfaceMongo 服务器接受来自 shell 的凭据,但不接受来自 Java/Scala 接口的凭据
【发布时间】:2015-06-12 01:01:18
【问题描述】:

我正在开发一个想要使用 Mongo Java 库连接到本地 MongoDB 实例的 Scala 框架,但失败了。它用来连接的 URI 是:

mongodb://user:pass@localhost:27017/mydb

这会在我尝试更新集合时引发以下异常:

com.mongodb.CommandFailureException: { "serverUsed" : "localhost:27017" , "ok" : 0.0 , "errmsg" : "auth failed" , "code" : 18}

但是,如果我从 URI 中提取参数并将它们提供给 Mongo shell:

$ mongo -u user -p pass --host localhost --port 27017 mydb

...然后它让我进去!任何人都可以提出为什么会这样吗?

可能但不太可能相关:在我运行我的框架的原始环境(运行 Ubuntu 的戴尔笔记本电脑)中一切正常。现在我正在尝试在 Virtualbox 中运行 Ubuntu 的 Mac 笔记本电脑上运行它。一切都应该几乎(ha)相同,但显然不是。

【问题讨论】:

  • 我会检查您的服务器是否接受远程连接,以及您的 shell 使用的 jdk 是否与您的 java 应用程序不同,或者您的防火墙(可能是 iptables)是否存在问题
  • 你读过这个:stackoverflow.com/questions/18216712/… 吗?
  • @user3707125 这个问题似乎涉及在现有连接上以管理员身份进行身份验证与建立新连接。就我而言,我使用两种不同的建立新连接的方式(shell 与 API)得到了相互冲突的响应。

标签: java mongodb


【解决方案1】:

显然是版本不匹配。我尝试卸载 Ubuntu 提供的 3.0.3 并使用我从 mongodb.org 下载的 2.6.10,我的库终于能够连接。

这是在我发现日志中有一行从记忆中类似于“在用户文档中找不到凭据”之后。

伙计,我知道跨主要版本号时可能会出现一些损坏,但阻止旧客户端甚至无法连接似乎非常极端。

【讨论】:

    【解决方案2】:

    就我而言,我必须将我的 mongo 驱动程序从 v2.12.5 升级到 v2.13.0 才能正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-08
      • 2019-11-13
      • 2013-03-09
      相关资源
      最近更新 更多