Як окремо вказати базу даних аутентифікації та цільову базу даних окремо на 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.