Як окремо вказати базу даних аутентифікації та цільову базу даних окремо на uri з'єднання mongodb?


13

Я використовую це з'єднання uri для підключення до mongodb : mongodb://user:password@localhost/admin. Він буде використовувати adminяк аутентифікацію бота та цільову базу даних. Як я можу зробити так, щоб урі використовувався 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> 

Ви ставите цільовий БД в кінець рядка "base" і додаєте db аутентифікації до параметра authSource


Так, саме це я шукаю. Спасибі
Joey Yi Zhao

4

Довідка:

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

Вам потрібно буде використовувати формат нижче і не потрібно використовувати адміністраторну базу даних.

mongodb: // користувач: пароль @ localhost / test? authSource = admin

/ База даних необов'язково Ім'я бази даних для автентифікації, якщо рядок з'єднання включає в себе облікові дані автентифікації у вигляді імені користувача: пароль @. Якщо / база даних не вказана, а рядок з'єднання включає в себе облікові дані, драйвер перевіряє автентифікацію на базу даних адміністратора.

Переконайтеся, що у вас є користувач у testбазі даних. Дивіться розділ 6 цього документа.

Увімкнути авт

Створіть додаткових користувачів у міру необхідності для розгортання.

База даних, де ви створюєте користувача (у цьому прикладі тестування) - це база даних автентифікації цього користувача. Хоча користувач отримав автентифікацію на цю базу даних, користувач може мати ролі в інших базах даних; тобто база даних аутентифікації користувача не обмежує привілеї користувача.

use test
db.createUser(
  {
    user: "myTester",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "test" },
             { role: "read", db: "reporting" } ]
  }
)

Я спробував цю урі, але вона не працює. Тому що він намагається використовувати testяк базу даних аутентифікації, що невірно. Мені потрібно використовувати adminяк базу даних аутентифікації та підключення до testбази даних.
Joey Yi Zhao

Змінена відповідь.
SqlWorldWide

Дякую за Вашу відповідь. Але я не хочу змінювати роль користувача в екземплярі бази даних. Чи є рішення, щоб не внести жодних змін у екземпляр?
Joey Yi Zhao

Ось як це спроектовано MongoDB.
SqlWorldWide

Це означає, що я не можу цього досягти монго урі?
Joey Yi Zhao
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.