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などの必要なコマンドを実行する方法はありますか?
どんな助けでも大歓迎です! :)
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;
問題は、--authenticationDatabase
パラメータを使用して使用しているデータベースに関連しています。
ListDatabaseコマンドを実行する権限のないテストデータベースのユーザーでmongoに接続しています。
これを、認証データベースとして管理データベースを使用して実行しましょう
mongo --Host 192.168.17.52 --port 27017 -u user1 -p password --authenticationDatabase admin
次にコマンドを実行します
show dbs