0

  大家好,

  现在我使用 mongo 作为我的数据库。我发现我的 mongo 连接有时会自动重置或失败。然后我在我的 mongo 日志文件中发现了一些奇怪的消息,即

auth:收到错误的随机数或未调用 getnonce。可能是驱动程序错误或安全攻击。数据库:用户

  我用谷歌搜索了它,但似乎很少有用户遇到过这个问题,我只在 github 中找到了链接https://github.com/mongodb/mongo/blob/master/db/security_commands.cpp的源代码。从代码来看,客户端发送user_name、use_password、nonce到服务器进行认证,日志消息是客户端发送的nonce与服务器分发的nonce不同造成的。

  我的 mongo 驱动程序有什么问题吗?有人遇到过这个问题吗?

4

1 回答 1

1

当我使用 mongodb-2.0.2 和 java-driver2.7.3 时,我也遇到了这个错误。它是一个单独的 mongodb 服务器,用于开发,--auth选项已打开。

我了解这是由多线程中的身份验证引起的:

DB db = m.getDB(dbName);
if(!db.isAuthenticated())
{
        boolean pass = db.authenticate(name, pwd.toCharArray());
        if(!pass)
            throw new Exception("User " + name + " authentication failed for db " + dbName + "!");
}

在服务器端,在完成一个身份验证请求之前,另一个线程发送了一个新请求,这导致第一个请求被覆盖。

加入synchronized这个方法后,就再也没有出现过。

于 2012-03-23T08:23:28.560 回答