Я создал бесплатный многоуровневый кластер в 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);