web-dev-qa-db-ja.com

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

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

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

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

13
Joey Yi Zhao

はい。簡単に!

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に追加します

26
JJussi

参照:

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" } ]
  }
)
4
SqlWorldWide