13

据说这个问题已经解决了最新版本的助力车,但仍然发生在我身上。我有一个带有 Mongoid 的 rails 4.2 应用程序,为具有readWritedbOwner角色的 MongoDB DB 创建了一个用户,并在mong.conf文件中设置了auth=true 。 我可以使用 Mongo shell 或使用 Mongo 驱动程序的简单 Java 应用程序使用该用户凭据在数据库上执行任何操作。 但是,当尝试使用 Mongoid 进行身份验证时,我总是会收到此错误:

失败,出现错误 13:“未授权查询 my_db.my_collection”

这是我的 mongoid.yml 文件的相关部分:

production:
  # Configure available database sessions. (required)
  sessions:
    # Defines the default session. (required)
    default:
      # Defines the name of the default database that Mongoid can connect to.
      # (required).
      database: my_db
      hosts:
              - localhost:27017
      username: my_username
      password: my_password

我还尝试用服务器的远程地址替换主机并远程访问它(在禁用身份验证选项的情况下工作)但没有成功。对于它的价值,我可以通过调试 mpped/node.rb 文件来查看凭据,在ensure_connected方法中我看到@credentials变量包含我的用户名和密码我在这里缺少什么?谢谢!

4

1 回答 1

12

也遇到了这个问题。我愿意猜测您正在运行 MongoDB 3+?

坏消息: Moped 2(今天被 mongoid 使用)不支持 MongoDB 3+ 的身份验证。

Moped 在支持服务器版本 3.0 的许多基本功能方面也存在不足。例如,它根本不支持使用 MongoDB 3.0 或最新版本的有线协议(包括 listCollections、listIndexes 和批量写入等命令)进行身份验证。将 Mongoid 与 Ruby 驱动程序 2.0 集成将为 ODM 带来很多这种功能和前向兼容性。 资源

好消息: 目前正在进行重大的重写(Mongoid 5),它将得到 MongoDB 团队的支持。您今天可以从 master 中提取并对其进行测试……但我不建议将其用于生产,因为它非常不稳定。

解决方案选项

  1. 从 MongoDB 和任何公共 DNS 中删除用户/传递身份验证到数据库。使用带有私钥的 SSH 并连接到私有地址。
  2. 降级到 MongoDB 2.x
  3. 使用 Mongoid 5
于 2015-06-16T18:33:02.813 回答