web-dev-qa-db-ja.com

MongoDB - 管理者ユーザーが承認されていません

MongoDBに認証を追加しようとしています。
私はMongoDB 2.6.1を使ってこれらすべてをLinux上で行っています。
私のmongod.confファイルは古い互換フォーマットです。
(これはインストールに付属している方法です)。

1)(3)の説明に従って管理者ユーザーを作成しました。

http://docs.mongodb.org/manual/tutorial/add-user-administrator/ /

2)この行のコメントを外してmongod.confを編集しました

auth = true

3)最後にmongodサービスを再起動し、次のようにログインしようとしました。

/usr/bin/mongo localhost:27017/admin -u sa -p pwd

4)私は接続することができますが、それは接続時にこれを言います。

MongoDB Shell version: 2.6.1
connecting to: localhost:27017/admin
Welcome to the MongoDB Shell!
The current date/time is: Thu May 29 2014 17:47:16 GMT-0400 (EDT)
Error while trying to show server startup warnings: not authorized on admin to execute command { getLog: "startupWarnings" }

5)今、私が作成したこのsaユーザーはまったく権限を持っていないようです。

root@test02:~# mc
MongoDB Shell version: 2.6.1
connecting to: localhost:27017/admin
Welcome to the MongoDB Shell!
The current date/time is: Thu May 29 2014 17:57:03 GMT-0400 (EDT)
Error while trying to show server startup warnings: not authorized on admin to execute command { getLog: "startupWarnings" }
[admin] 2014-05-29 17:57:03.011 >>> use admin
switched to db admin
[admin] 2014-05-29 17:57:07.889 >>> show collections
2014-05-29T17:57:10.377-0400 error: {
        "$err" : "not authorized for query on admin.system.namespaces",
        "code" : 13
} at src/mongo/Shell/query.js:131
[admin] 2014-05-29 17:57:10.378 >>> use test
switched to db test
[test] 2014-05-29 17:57:13.466 >>> show collections
2014-05-29T17:57:15.930-0400 error: {
        "$err" : "not authorized for query on test.system.namespaces",
        "code" : 13
} at src/mongo/Shell/query.js:131
[test] 2014-05-29 17:57:15.931 >>>

問題は何ですか?この手順全体を3回繰り返した
MongoDBのドキュメントで指定されているとおりにすべて行ったと思います。しかし、うまくいきません。
私はこのsaユーザーが何かをする権限を与えられることを期待していました。
彼は他のユーザーを作成し、それらにもっと具体的な権限を与えることができます。

147
peter.petrov

私も同じ問題について私の頭を悩ませていました、そして最初の管理ユーザーを追加するときにrootになるようにロールを設定した後にすべてがうまくいきました。

use admin
db.createUser(
  {
    user: "admin",
    pwd: "password",
    roles: [ { role: "root", db: "admin" } ]
  }
);
exit; 

完全な認証設定のリファレンスについては、 steps を参照してください。

345
s-hunter

ちょっとややこしいです - データベースをクエリするにはreadWriteを自分自身に付与する必要があると思います。 dbadminまたはuseradminを持つユーザーはデータベースを管理できます(自分自身に追加の権限を付与することを含む)が、クエリを実行したりデータを書き込むことはできません。

それであなた自身にreadWriteを与えてください、そしてあなたは大丈夫であるべきです -

http://docs.mongodb.org/manual/reference/built-in-roles/#readWrite

32
John Petrone

おそらく、現在のユーザーを変更する方法の簡単な例が誰かに役立つでしょう。これが私が実際に探していたものです。

@JohnPetroneのアドバイスに従い、adminユーザーに readWrite roleを grantRolesToUserで追加しました

> use admin
> db.grantRolesToUser("admin",["readWrite"])
> show collections
system.users
system.version
29
Bart C

試すことができます:--authenticationDatabaseフラグを使用すると役立ちます。

mongo --port 27017 -u "admin" -p "password" --authenticationDatabase "admin"
20
jremi

私はこの答えがこのスレッドの中で本当に遅くなっているのを知っています、しかしあなたがそれをチェックアウトすることを願っています。

このエラーが発生した理由は、今までに収集したユーザーに割り当てた特定のロールに基づいています。そのユーザーにrootロールを割り当てることで問題は解決しますが、最初にこれらのロールが何をするかを理解してくださいユーザーにそれらを。

チュートリアルでは、基本的にすべてのデータベースのユーザーを管理する権限をユーザーに付与するuserAdminAnyDatabaseロールをユーザーに付与しました。あなたがあなたのユーザに対してやろうとしていたことは、そのロール定義の範囲外でした。

rootロールは、このロールとそれをスーパーユーザーにするreadWriteAnyDatabasedbAdminAnyDatabaseおよびその他のロールを含む定義に含まれています(基本的にそれを使って何でもできるからです)。

役割の定義を調べて、特定のタスクを完了するためにどの役割をユーザーに与える必要があるかを確認できます。 https://docs.mongodb.com/manual/reference/built-in-roles/ すべてのユーザーをスーパーユーザーにすることはお勧めできません:)

7
el Punch

私はここでWindows環境で同様の問題を抱えていました:私はBitnami DreamFactoryをインストールしました、そしてそれはシステム起動時に開始される別のMongoDbもインストールします。私は自分のMongoDbServiceを実行していました(それはエラーなしで開始されました)が、実際にBitnamiのMongoDbサービスに接続していることに多くの時間を失った後に気付きました。サーバー上でmongoDBの他のインスタンスが実行されていないかどうかを確認してください。

がんばろう!

0
ibirite

mydbを使う
db.createUser({user: "test"、pwd: "secret"、役割:["readWrite"、 "dbAdmin"]、passwordDigestor: "server"})

0
user1797498

簡単な質問です。

  1. ターゲットのdb _を_ adminに変更しないでください。

yourDBを使う

  1. でdb認証を確認してください。

ユーザーを表示

  1. あなたが{}空のオブジェクトを得た場合、それが問題です。入力するだけです

db.createUser({user: "yourUser"、pwd: "password"、役割:["readWrite"、 "dbAdmin"]})

または

db.grantRolesToUser( 'yourUser'、[{ロール: "dbAdmin"、db: "yourDB"}]))

0
cocoTW

また、mongo Shellクライアントがmongodインスタンスに正しく接続できない場合は、このような "Permission Denied"エラーが発生する可能性があります。

接続ポートを確認してクライアントが接続を開くことを確認しますが、mongodで使用しているポートが使用されていないことも確認します。シェルとプロセスの両方で--port <port>パラメーターを使用して、別のポートを設定できます。

0

私のプロジェクトでは、 MongoDB Compass のホスト名がadminを指していたため、この問題が発生しました。ホスト名の後に/ projectnameを追加することで解決されます。

  1. MongoDBアトラスWebサイトでプロジェクトを選択してください
  2. MongoDBコンパスとの接続/接続
  3. コンパスをダウンロードする/ OSを選択してください
  4. コンパス1.12以降を使用しました
  5. 接続文字列をCompass 1.12以降にコピーします。
  6. MongoDBコンパスを開く/接続する(左上)/接続する
  7. 接続文字列が検出されました/はい/
  8. ホスト名の後にプロジェクト名を追加します。cluster9-foodie.mongodb.net/ projectname
  9. POSTMANでAPIを接続してテストしました。
  10. 成功する.

コードにも同じ接続文字列を使用します。

  1. 前:
    • mongodb + srv:// プロジェクト名:パスワード@@cluster9-foodie.mongodb.net/ admin
  2. 後:
    • mongodb + srv:// プロジェクト名:パスワード@@cluster9-foodie.mongodb.net/プロジェクト名

がんばろう。

0
Mr. Dang

Admin dbに対して認証を取得する必要があり、DBからの「ローカルホスト例外」(これはオンプレミスでホストされているmongoDBの場合)を回避する正しい権限を持つロールが少なくとも必要であることに同意しましたが、すべてを適切に実行し、まだMongo Atlasを使用して作成されたmongoDBにアクセスしながら、ほとんどすべてのコマンドで許可されていない例外を取得する場合、ここで理由、理由を知ることができます:

https://dba.stackexchange.com/questions/219003/not-authorized-on-admin-to-execute-command-mongodb-atlas-m0-free-tier-cluster?newreg=471a9a26108243d78d4ca74a87e7a115

また、mongoDBをmongo Atlasでホストしている場合もこれを確認します。

https://docs.atlas.mongodb.com/unsupported-commands/

0
srinivasy

私は同じケースの問題を抱えていましたが、私の場合は変数mongodb_security_authorizationが原因で、基本的に「有効」に設定されていました。

mongodb_security_authorization: "enabled"

それに:

mongodb_security_authorization: "disabled"