2013-07-30 1 views
0

Я выполняю свое приложение с пользователем readOnly = false admin в течение 6 месяцев в разработке на MongoDB 2.2.2. Мы приближаемся к запуску, и я хотел переключить пользователя на то, что мое приложение работает под пользователем, в базе данных приложения только с readOnly = false.MongoDB C# driver WriteConcernException Неавторизованный при записи для readOnly = false user

Я запустил следующий скрипт из robomongo в качестве пользователя admin.

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

Я также обновил строку подключения MongoDB до следующего.

<add key="DataServer" value="mongodb://api:[email protected]:27017/MyDB" /> 

Он создал мой пользователь правильно и я подтверждено, что в MyDB и доступен только для чтения = ложь. Однако, когда я использую драйвер MongoDB C# 1.8.1, он не работает при любых попытках записи с WriteConcernException. Я умею хорошо читать записи из базы данных. Глядя на журналы MongoDB, он корректно входит в мою БД из моего приложения C#, но не выполняет вызовы записи.

Используя оболочку robomongo, я смог успешно выполнить авторизацию с пользователем api и записать записи в одну из коллекций в БД приложения. Поэтому это заставляет меня думать, что это как-то связано с драйвером C#. Я также отладил код приложения и подтвердил, что метод GetServer от MongoClient возвращает MongoServer с правильными учетными данными.

Вот сценарий оболочки 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 = ложным пользователем было бы весьма признателен.

ответ

1

Я не вижу в вашем коде очень плохого кода. Я бы предложил попробовать следующее:

  1. Убедитесь, что вы читаете DataServer приложение правильно настройки в вашей C# код (включая имя БД)
  2. Создать пользователя в базе данных администратора и посмотреть, если это помогает :

use admin 
db.addUser("api", "MyPassword"); // readonly defaults to false 
+0

Я переключил свой скрипт, который добавляет пользователь использовать администратор и он все еще не удается. Глядя на json пользователя raw пользователя из db.system.users.find(), выяснилось, что пользователь api имел «readOnly»: {«readOnly»: false}, в отличие от моего пользователя root, который имел «readOnly»: false. Я обновил свой сценарий до db.addUser («api», «MyPassword», false); и теперь я могу писать. Спасибо за руководство по попытке использовать admin db. – Zambonilli

+0

@ Zambonilli, поэтому я думаю, что ваша проблема, возможно, заключалась в том, что вы «читали только» в кавычках. Просто выполняйте 'db.addUser (« api »,« MyPassword », {readOnly: false});' (обратите внимание на кавычки в readOnly) должно было работать. –

+0

Это действительно интересно. Я открыл ошибку документации с MongoDB. Надеюсь, что пользователи и роли будут намного лучше в 2.4. :-) – Zambonilli

 Смежные вопросы

  • Нет связанных вопросов^_^