web-dev-qa-db-ja.com

MongoDB-コマンドの実行が許可されていません

MongoDBで認証を正常に有効にし、adminデータベースにアカウントを作成してから、testというデータベース用のアカウントを作成しました。テストデータベースに接続する次の接続文字列は正常に機能します:mongo --Host 192.168.17.52 --port 27017 -u user1 -p password --authenticationDatabase test

私が今抱えている唯一の問題は、show dbsなどのコマンドを実行できないことです。そうしようとすると、次のエラーが発生します。

"errmsg" : "not authorized on admin to execute command { listDatabases: 1.0, lsid: { id: UUID(\"a1d5bc0d-bc58-485e-b232-270758a89455\") }, $db: \"admin\" }"

私はこの問題を解決するために多くのオンラインソースを利用していますが、うまくいきません。この問題を解決する方法はありますか?ユーザーが管理データベースにアクセスできないようです。このアクセスをユーザーに許可して、show dbsなどの必要なコマンドを実行する方法はありますか?

どんな助けでも大歓迎です! :)

6
Hasan

show dbsコマンドを実行し、ユーザーが複数のデータベースにアクセスできる場合は、最初にadminデータベースにユーザーを作成する必要があります(これは、listDatabasesアクションがクラスター全体に及ぶためです)操作)。また、ユーザーにはこの操作へのアクセス権が付与されている必要があります。これを行うには、アクションを使用して新しいロールを作成する必要があります。以下は同じための手順です:

// adminとして--authenticationDatabase "admin"を使用してログインし(adminユーザーはroot特権を持っていると想定)、以下を実行します。

use admin;

db.runCommand({ createRole: "listDatabases", privileges: [{ resource: { cluster : true }, actions: ["listDatabases"]} ], roles: [] });

db.createUser({user:"testUser", pwd:"passwd", roles:[{role:"read", db:"db1"},{role:"read", db:"db2"},{ role: "listDatabases", db: "admin" }]});

//管理ユーザーとして終了し、testUserとしてログインします:--authenticationDatabase "admin"に注意してください

mongo -u "testUser" -p --authenticationDatabase "admin"

ログイン後、以下のコマンドを実行すると、すべてのデータベースがリストされます。

show dbs;

以下は、ユーザーがadminデータベースへのアクセス権を与えられていなくても正常に機能します。

use admin;

しかし、以下はエラーになります:

show collections;
1
nabeel

問題は、--authenticationDatabaseパラメータを使用して使用しているデータベースに関連しています。

ListDatabaseコマンドを実行する権限のないテストデータベースのユーザーでmongoに接続しています。

これを、認証データベースとして管理データベースを使用して実行しましょう

mongo --Host 192.168.17.52 --port 27017 -u user1 -p password --authenticationDatabase admin

次にコマンドを実行します

show dbs
0
MetalMad