Как указать базу данных аутентификации и целевую базу данных отдельно на UI-соединении mongodb?

13

Я использую это подключение URI для подключения к MongoDB: mongodb://user:password@localhost/admin. Он будет использоваться adminкак аутентификация ботов и целевая база данных Как я могу сделать URI для использования в adminкачестве аутентификации, но разрешить мне подключаться к другой базе данных? Пожалуйста, смотрите ниже команду в качестве примера:

mongo --host localhost -u user -p password --authentication admin test

adminПриведенная выше команда будет использоваться в качестве базы данных аутентификации, но подключаться к testбазе данных. Как я могу сделать то же самое на Ури?

Джои Йи Чжао
источник

Ответы:

26

Да .. легко!

mongo "mongodb://test:testpwd@localhost/test?authSource=admin"
MongoDB shell version v3.4.6
connecting to: mongodb://test:testpwd@localhost/test?authSource=admin
MongoDB server version: 3.4.6
MongoDB> db
test
MongoDB> 

Вы помещаете свою целевую БД в конец «базовой» строки и добавляете базу данных аутентификации в параметр authSource

JJussi
источник
Да, это именно то, что я ищу. Спасибо
Джои Йи Чжао
4

Ref:

https://docs.mongodb.com/manual/reference/connection-string/#connections-connection-options

Вам нужно будет использовать приведенный ниже формат и не нужно использовать базу данных администратора.

MongoDB: // пользователь: пароль @ локальная / тест = админы авторизация источник

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

Убедитесь, что у вас есть пользователь в testбазе данных. Смотрите раздел 6 этого документа.

Включить аутентификацию

Создайте дополнительных пользователей по мере необходимости для вашего развертывания.

База данных, в которой вы создаете пользователя (в данном примере, test), является базой данных аутентификации этого пользователя. Хотя пользователь будет проходить аутентификацию в этой базе данных, он может иметь роли в других базах данных; т.е. база данных аутентификации пользователя не ограничивает привилегии пользователя.

use test
db.createUser(
  {
    user: "myTester",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "test" },
             { role: "read", db: "reporting" } ]
  }
)
SqlWorldWide
источник
Я попробовал этот URI, но он не работает. Потому что он пытается использовать testв качестве базы данных аутентификации, которая не является правильной. Мне нужно использовать в adminкачестве базы данных аутентификации и подключиться к testбазе данных.
Джои И Чжао
Модифицированный ответ.
SqlWorldWide
Спасибо за ваш ответ. Но я не хочу менять роль пользователя в экземпляре базы данных. Есть ли решение не вносить никаких изменений в экземпляр?
Джои И Чжао
Вот как это разработано MongoDB.
SqlWorldWide
Значит ли это, что я не могу добиться этого с помощью Монго Ури?
Джои И Чжао