web-dev-qa-db-ja.com

MongoDBのスーパー管理者は正常に認証されますが、未承認のクエリエラーが発生しますか?

MongoDBを認証で使用し始めました。ドキュメントによると、localhost例外を使用して、userAdminAnyDatabaseの単一ロールを持つ管理ユーザーを作成しました。それはすべてうまくいった。 「mongo」クライアントを実行し、adminデータベースに対してusingそのデータベースに番号が表示されます1認証が成功したことを示しています。ただし、実行しようとしたコマンドはすべて、「承認されていない」エラーになり、承認したばかりの管理データベース内のコレクションを表示しようとしても結果は変わりません。

誰がこれがなぜであり、どのように修正できるか教えてもらえますか?現在、これを修正できるまで認証なしで実行しています。

4
Robert Oschler

userAdminAnyDatabaseロール(およびその拡張であるuserAdminロール)は、データベースのユーザーを管理するためのsystem.usersコレクションの読み取りおよび書き込み権限をユーザーに付与するだけです。ユーザーがデータベースの実際のコレクションを読み書きすることはできません。そのためには、readまたはreadWriteロールを付与する必要があります。

MongoDBのユーザー特権ロール および データベースへのユーザーの追加 を参照してください。

4
David Edwards

次の手順を実行して、認証の問題を解決してください。

  1. 認証を有効にせずにmongodを起動し、実行します:
  2. データベースを作成する
  3. ロールを持つユーザーを作成する
  4. 1つのドキュメントでダミーコレクションを作成する
  5. モンゴッドを止める/殺す
  6. 認証を有効にしてmongodを起動します
  7. 手順1で作成したデータベースに切り替えます
  8. 手順3で作成したユーザーを使用してデータベースで認証する

サンプルコマンド:

  1. mongod --port 27017 --dbpath /data/db1
  2. use educationDb;
  3. db.createUser({ user : 'readonly', pwd: 'readonly', roles : ['read']})
  4. db.xyz.insert({"name":"nix.education"})
  5. モンゴッドを止める/殺す
  6. mongod --auth --port 27017 --dbpath /data/db1
  7. use educationDb;
  8. db.auth('readonly','readonly')
0
nix