mongodb接続URIで認証データベースとターゲットデータベースを個別に指定する方法


13

この接続uriを使用して、mongodbに接続しています:mongodb://user:password@localhost/adminadminボット認証およびターゲットデータベースとして使用します。URIをadmin認証として使用するが、別のデータベースに接続できるようにするにはどうすればよいですか?例として以下のコマンドを参照してください:

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

上記のコマンドはadmin認証データベースとして使用されますが、testデータベースに接続します。uriで同じことをするにはどうすればよいですか?

回答:


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> 

「ベース」文字列の最後に宛先DBを置き、認証データベースをパラメーターauthSourceに追加します


うん、これはまさに私が探しているものです。ありがとう
Joey Yi Zhao

4

参照:

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

以下の形式を使用する必要があり、管理データベースを使用する必要はありません。

mongodb:// user:password @ localhost / test?authSource = admin

/ databaseオプション。接続文字列にusername:password @の形式の認証資格情報が含まれている場合に認証するデータベースの名前。/ databaseが指定されておらず、接続文字列に資格情報が含まれている場合、ドライバーは管理データベースを認証します。

testデータベースにユーザーがいることを確認してください。このドキュメントのセクション6を参照してください。

認証を有効にする

デプロイメントの必要に応じて、追加のユーザーを作成します。

ユーザーを作成するデータベース(この例ではtest)は、そのユーザーの認証データベースです。ユーザーはこのデータベースに対して認証を行いますが、ユーザーは他のデータベースで役割を持つことができます。つまり、ユーザーの認証データベースはユーザーの権限を制限しません。

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

私はこのURIを試しましたが、機能しません。不正なtest認証データベースとして利用しようとするため。admin認証データベースとして使用し、データベースに接続する必要がありtestます。
Joey Yi Zhao

回答を修正しました。
SqlWorldWide 2017

お返事をありがとうございます。しかし、データベースインスタンスのユーザーロールを変更したくありません。インスタンスに変更を加えない解決策はありますか?
Joey Yi Zhao

これがMongoDBによって設計された方法です。
SqlWorldWide 2017

これは私がモンゴウリでこれを達成できないことを意味しますか?
Joey Yi Zhao
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.