Я довольно новичок в Linux, NodeJs и MongoDB, но я установил Linux Сервер, на котором запущен MongoDB (версия db v4.0.16).
Я добавил двух таких пользователей. Один называется mon go -admin, а другой - mon go - root.
# mongo
> use admin
> db.createUser({
user: "mongo-admin",
pwd: "myAwesomePassword",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
})
> db.createUser({
user: "mongo-root",
pwd: "myAwesomePassword",
roles: [ { role: "root", db: "admin" } ]
})
Затем я включил аутентификацию в /etc/mongod.conf следующим образом
security:
authorization: "enabled"
На моей машине разработки я установил небольшой сценарий NodeJS, который пытается подключиться к серверу с помощью mon goose, и просто добавил туда документ.
Теперь ситуация очень странная. Если я использую mongodb://mongo-root:myAwesomePassword@100.100.100.100:27017
в качестве строки подключения, все работает нормально, создается новая БД с именем test
и документ добавляется. Но как только я добавляю /mydatabasename
в конец строки, mon goose неожиданно истекает через 30 секунд после попытки подключения.
Если я подключаюсь к MongoDB с помощью программного обеспечения под названием Robo3T, я могу подключиться очень хорошо, и у меня также есть права на создание новой базы данных.
Я также проверил /etc/log/mongod.log
и обнаружил эту ошибку:
2020-02-05T07:40:22.006+0000 I ACCESS [conn27] SASL SCRAM-SHA-1 authentication failed for mongo-root on mydatabasename from client 101.101.101.101:51270 ; UserNotFound: Could not find user mongo-admin@mydatabasename
Это способ подключения к БД
mongoose.connect(
"mongodb://mongo-root:myAwesomePassword@100.100.100.100:27017/mydatabasename",
{
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true
}
);
Кажется, что mongodb ищет пользователя в базе данных, которую следует создать, а не в базе данных администратора.