Пользовательские пользовательские роли MongoDB - «пользователю запрещен (...)» - PullRequest
0 голосов
/ 15 декабря 2018

Я создал бесплатный многоуровневый кластер в MongoDB Atlas (в нем 3 шарда), и я хочу, чтобы мое приложение Node.js связывалось с базой данных, которую я там создал, используя определенного пользователя, для которого будет запрещено использовать любую другую базу данных, кромеодин предназначен для этого приложения.

Итак, шаг за шагом.

Я создаю базу данных, скажем, test.

Я создаю роль здесь - я перехожу на Security -> MongoDB Roles -> Add New Custom Role и даю все Collection actions и все Database actions and roles на test

Время для пользователя, поэтому снова Security -> MongoDB Users -> Add New User и я назначаю ранее созданноероль, чтобы он имел доступ только к базе данных test.Так что теперь у меня есть 2 пользователя - atlasAdmin и мой созданный пользователь.

Вот где возникает проблема, когда я использую пользователя admin в своем приложении для подключения, .find() или .create(), он работает постоянно.Для пользователя с настраиваемой ролью он работает примерно как 10 минут / 1 соединение (пока я не выключу локальный сервер, на котором у меня есть приложение узла), и в следующий раз я получаю сообщение об ошибке «пользователю не разрешено выполнять действие (...)».

Я попробовал все, переделывая строку, которую я использую для подключения, обновив mongoose (я использую это в своем приложении), создав пользовательскую и пользовательскую роль с помощью оболочки mongodb, но, похоже, ничего не работает.

ОДНАКО:

  • если у меня есть этот пользовательский пользователь, мое приложение подключается к нему с базой данных, и оно работает, затем при следующем подключении оно перестает работать, и я иду здесь и просто нажмите UPDATE USER, ничего не меняя там (я просто нажимаю edit рядом с пользователем и затем update), затем подождите, пока кластер внесет изменения, он снова будет работать для +/- одного соединения.

  • все работает отлично, если мое приложение использует учетную запись администратора

У кого-нибудь была подобная проблема? Снимок экрана с ошибкой Я также подумал, что это может быть из-за того, сколько раз я пытаюсь подключиться к Монго из приложения (я использую nodemon, поэтому каждый раз, когда я сохраняю файл с изменениями, сервер перезагружается,таким образом, снова подключаясь к базе данных), но я думаю, что это не тот случай - если бы это было так, почему я мог бы заставить его работать с администратором?

Строка, которую я использую для соединения с Монго:

// DATABASE SETUP var dbURL = 'mongodb://[cluster0:port],[cluster1:port],[cluster2:port]/test?ssl=true&replicaSet=Cluster0-shard-0&authSource=admin&retryWrites=true'; var options = { useNewUrlParser: true, dbName: "test" user: [login], pass: [pass] }; mongoose.connect(dbURL, options);

1 Ответ

0 голосов
/ 27 декабря 2018

Я также сталкивался с этой проблемой на уровне Atlas Free, не только на NodeJS, но и на Java

На данный момент вы можете попробовать решить эту проблему, используя роль по умолчанию вместо пользовательской

На вкладке «Пользователи MongoDB» нажмите «Изменить» для своего пользователя => Добавить привилегии по умолчанию

Изображение 1

Затем выберите «readWrite» и введите свойимя базы данных в первом поле, затем сохраните пользователя

Изображение 2

Или, если вы хотите администрировать базу данных, добавьте другое поле с ролью "dbAdmin"

Изображение 3

По крайней мере, так я решил.Надеюсь, это поможет.

Примечание: вы также можете использовать более короткую строку подключения (MongoDB + SRV), и она все равно будет работать.

...