私はこの接続URIを使用してmongodbに接続しています:mongodb://user:password@localhost/admin
。ボット認証およびターゲットデータベースとしてadmin
を使用します。 uriに認証としてadmin
を使用させ、別のデータベースへの接続を許可するにはどうすればよいですか?例として以下のコマンドを参照してください:
mongo --Host localhost -u user -p password --authentication admin test
上記のコマンドは、認証データベースとしてadmin
を使用しますが、test
データベースに接続します。 uriで同じことをするにはどうすればよいですか?
はい。簡単に!
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に追加します
参照:
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" } ]
}
)