0

MongoDB 2.2.2 での開発で、6 か月間 readOnly=false 管理者ユーザーでアプリケーションを実行してきました。ローンチが近づいてきたので、アプリケーションを実行するユーザーを、アプリケーションのデータベース内の 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# アプリケーションから DB に正しくログインしていますが、書き込み呼び出しに失敗しています。

robomongo シェルを使用して、api ユーザーで正常に認証し、アプリケーションの DB 内のコレクションの 1 つにレコードを書き込むことができました。そのため、これは c# ドライバーに関係していると思われます。また、アプリケーション コードをデバッグし、MongoClient の GetServer メソッドが正しい資格情報を持つ MongoServer を返すことを検証しました。

これは、ユーザーが DB に書き込めることを検証するために実行した robomongo シェル スクリプトです。

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 ユーザーでユーザー DB にレコードを書き込めない理由についての助けをいただければ幸いです。

4

1 に答える 1

1

あなたのコードにはあまり問題がありません。次のことを試すことをお勧めします。

  1. C# コード (DB 名を含む) で DataServer アプリの設定を正しく読み取っていることを確認してください。
  2. 管理データベースにユーザーを作成し、それが役立つかどうかを確認します。

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