Я выполняю свое приложение с пользователем 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 = ложным пользователем было бы весьма признателен.
Я переключил свой скрипт, который добавляет пользователь использовать администратор и он все еще не удается. Глядя на json пользователя raw пользователя из db.system.users.find(), выяснилось, что пользователь api имел «readOnly»: {«readOnly»: false}, в отличие от моего пользователя root, который имел «readOnly»: false. Я обновил свой сценарий до db.addUser («api», «MyPassword», false); и теперь я могу писать. Спасибо за руководство по попытке использовать admin db. – Zambonilli
@ Zambonilli, поэтому я думаю, что ваша проблема, возможно, заключалась в том, что вы «читали только» в кавычках. Просто выполняйте 'db.addUser (« api »,« MyPassword », {readOnly: false});' (обратите внимание на кавычки в readOnly) должно было работать. –
Это действительно интересно. Я открыл ошибку документации с MongoDB. Надеюсь, что пользователи и роли будут намного лучше в 2.4. :-) – Zambonilli