0

在 MongoDB 2.2.2 的开发过程中,我已经使用 readOnly=false 管理员用户运行了 6 个月的应用程序。我们越来越接近发布,我想将运行我的应用程序的用户切换到应用程序数据库中的用户,仅使用 readOnly=false。

我以管理员用户身份从 robomongo 运行以下脚本。

use MyDB
db.addUser("api", "MyPassword", {"readOnly": false});

我还将 MongoDB 连接字符串更新为以下内容。

<add key="DataServer" value="mongodb://api:MyPassword@localhost:27017/MyDB" />

它正确地创建了我的用户,并且我验证它在 MyDB 中并且是 readOnly=false。但是,当我使用 MongoDB c# 驱动程序 1.8.1 时,它在任何未经授权的 WriteConcernException 的写入上都会失败。我能够很好地从数据库中读取记录。查看 MongoDB 日志,它正确地从我的 c# 应用程序登录到我的数据库,但在写入调用时失败。

使用 robomongo shell,我能够成功地与 api 用户进行身份验证,并将记录写入应用程序数据库中的集合之一。所以这让我相信这与 c# 驱动程序有关。我还调试了我的应用程序代码并验证了 MongoClient 的 GetServer 方法正在返回具有正确凭据的 MongoServer。

这是我运行以验证用户是否能够写入数据库的 robomongo shell 脚本。

use MyDB
db.auth("api","MyPassword");
db.Person.insert({"first_name":"Test","last_name":"User"});
db.Person.find({"first_name":"Test"});

关于为什么 MongoDB c# 1.8.1 驱动程序连接到 MongoDB 2.2.2 并且无法使用 readOnly=false 用户在用户数据库中写入记录的任何帮助将不胜感激。

4

1 回答 1

1

我真的看不出你的代码有什么问题。我建议尝试以下方法:

  1. 确保您在 C# 代码中正确读取 DataServer 应用程序设置(包括数据库名称)
  2. 在 admin 数据库中创建用户,看看是否有帮助:

use admin
db.addUser("api", "MyPassword"); // readonly defaults to false
于 2013-07-30T17:05:22.987 回答