Пн goose раз, если установлено имя базы данных - PullRequest
0 голосов
/ 05 февраля 2020

Я довольно новичок в 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 ищет пользователя в базе данных, которую следует создать, а не в базе данных администратора.

1 Ответ

1 голос
/ 05 февраля 2020

Проверка Строка подключения URI Формат

 mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[database][?options]]

/ база данных

Необязательно. Имя базы данных для проверки подлинности, если строка подключения содержит учетные данные для проверки подлинности в виде username:password@. Если / база данных не указана, а строка подключения содержит учетные данные, драйвер выполнит проверку подлинности в базе данных администратора. См. Также authSource.

authSource

Укажите имя базы данных, связанное с учетными данными пользователя. authSource по умолчанию использует базу данных, указанную в строке подключения .

На самом деле документация не является на 100% правильной для этой точки, строка подключения должна выглядеть следующим образом:

mongodb://mongo-root:myAwesomePassword@100.100.100.100:27017/mydatabasename?authSource=admin 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...