MongoDB-管理ユーザーが許可されていません


200

MongoDBに認証を追加しようとしています。
LinuxではMongoDB 2.6.1を使用してこれをすべて行っています。
私の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ユーザー
には、他のユーザーを作成してより具体的な権限を与えることができるように、何かをする権限があることを期待していました。


20
これは非常に煩わしいか、文書化が不十分です。私はそこで奮闘していました。最後に、グローバルな「ルート」ロールを持つユーザー
がいて、

回答:


471

また、同じ問題について頭を悩ませていました。最初の管理者ユーザーを追加するときにロールをrootに設定した後は、すべてが機能しました。

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

すでにadminユーザーを作成している場合は、次のように役割を変更できます。

use admin;
db.grantRolesToUser('admin', [{ role: 'root', db: 'admin' }])

完全な認証設定のリファレンスについては、インターネット上で何時間もの調査を行った後にまとめた手順を参照してください。


154
WTF ?! このような愚かなことのために時間を失った。なぜ彼らはuserAdminAnyDatabase代わりにドキュメントを入れるのrootですか?
akostadinov 2016

15
アイデアは、最初に他のユーザーを管理するためだけに使用されるユーザー(つまり、「userAdmin」で始まるロール)を作成し、次に通常のユーザーのみを作成することです。それは一種の理にかなっていますが、私も最初にそれを正しく理解していませんでした... @akostadinov
TomTasche

10
これは、MongoDBのをv3.4.7に私のために動作しませんでした:db.grantRolesToUser('admin',[{ role: "root", db: "admin" }])
user124384

2
このコード@Cerin DID私のために仕事を:db.grantRolesToUser('admin',[{ role: "root", db: "admin" }])、そしてそれは私が混乱します。コマンドを実行する権限がありませんが、コマンドを実行して自分をrootにしてからそのコマンドを実行できます。非常に奇妙です:S

2
あるものでは用のdb.grantRolesToUser('admin',[{ role: "root", db: "admin" }])ない仕事をした、あなたがに戻すことを確認してくださいuse admin、私はスイッチバックたら...同じ問題があったが、それは魅力のように働いた
esko22

37

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

だからあなた自身にreadWriteを許可してください、あなたは大丈夫です-

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


この回答が質問に関連するかどうかはわかりませんが、どちらにしても間違った情報を提供します。dbOwnerロールには、readWriteロールが含まれています:docs.mongodb.org/manual/reference/built-in-roles/#dbOwner
Andy

10
正解です-dbadminおよびuseradminロール(元の投稿者が尋ねたもの)にはreadWriteが含まれていません。dbOwnerはそうしますが、それは元のポスターが使用していて求めていたものではありません。
John Petrone 2014

3
あなたは絶対的に正しいです。謝罪。私は役割の整理にあまりにも長い時間を費やしており、困惑していました。
Andy Triggs 2014

したがって、実際のmongodbサーバーにアクセスするための管理者ユーザーを作成し、特定のデータベース用に他のユーザーを作成できますか?
K-SOの毒性が高まっています。

32

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

@JohnPetroneのアドバイスに従って、grantRolesToUserで管理者ユーザーにreadWriteロールを追加しました

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

26

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

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

8

この回答がこのスレッドで本当に遅くなるのは知っていますが、ぜひご覧ください。

このエラーが発生する理由は、ユーザーがユーザーに付与した特定のロールに基づいており、これは現在までに収集されており、はい、そのユーザーにロールを付与しています rootをすると問題が解決しますが、付与する前にこれらの役割が正確に何を行うかを理解する必要がありますユーザーに。

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

root役割は、その定義に含まこの役割を持っているだけでなくreadWriteAnyDatabasedbAdminAnyDatabaseそれをスーパーユーザを作成し、他の役割を(基本的にあなたがそれを使って何を行うことができますので)。

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


では、rootでない場合、問題を解決するためにどのような役割を提案しますか?
ヘンディイラワン2017年

こんにちは@HendyIrawanです。各ユーザーに何を実行できるようにするかを正確に決定し、それだけを可能にする役割をユーザーに与えることをお勧めします。たとえば、ユーザーに読んでもらいたいだけの場合(これは質問で何をしようとしているのかshow collections)、その機能だけを与え、他には何も与えないようにする必要があります roles: [ { role: "read", db: "admin" } ]。ここで役割が読み取られることに注意してください。これはデータベース固有であり、それ以外は何もできません。他のロールdocs.mongodb.com/manual/reference/built-in-roles
el Punch

したがって、ここでの質問に対する答え(「たとえば」ではない)は「読み取り」ですか?
ヘンディイラワン2017年

はい。ユーザーは指定されたデータベースを読み取る機能しか持っていないことに注意してください。
el Punch

2

簡単な質問です。

  1. それはあなたがターゲットDBが切り替えなければならないことが重要ですしないで管理。

yourDBを使用する

  1. あなたのDB認証をチェックしてください

ユーザーを表示

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

db.createUser({ユーザー: "yourUser"、pwd: "パスワード"、ロール:["readWrite"、 "dbAdmin"]})

または

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


0

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

幸運を!


2
なぜこの回答が反対投票されたのかはわかりません。これは正当な提案です。たとえば、Tomcatを内部で実行していた管理コンソールに遭遇しました。(任意のタイプの)ローカルサーバーを起動すると、接続を試みて、実行されているかどうかを確認します。その最初の接続は成功します。次に、サーバーのログをチェックしてサーバーが目的のポートにバインドできなかったことに気づく前に、「隠された」サーバーと格闘します。
ポール

0

さらに、mongoシェルクライアントがmongodインスタンスに正しく接続できなかった場合は、このような "Permission Denied"エラーを受け取る可能性があることに注意してください。

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


0

MongoDB Compassのホスト名がプロジェクトではなくadminを指しているため、この問題が発生しました。ホスト名の後に/ projectnameを追加することで修正:)これを試してください:

  1. でプロジェクトを選択します MongoDBアトラスWebサイトで
  2. MongoDB Compassとの接続/接続
  3. Compassをダウンロード/ OSを選択
  4. Compass 1.12以降を使用しました
  5. Compass 1.12以降で接続文字列をコピーします。
  6. MongoDB Compass / Connect(左上)/ Connect Toを開きます
  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

mydb
db.createUser({user: "test"、pwd: "secret"、roles:["readWrite"、 "dbAdmin"]、passwordDigestor: "server"})を使用します。


0

admin dbに認証される必要があり、DBからの「ローカルホスト例外」(これはmongoDBがオンプレミスでホストされるためのものです)を回避する正しい権限を持つロールが少なくとも必要であることに同意しますMongo Atlasを使用して作成されたmongoDBにアクセスしているときに、ほとんどすべてのコマンドで承認されていない例外が発生する場合、その理由を知っている可能性のある場所、理由は次のとおりです。

/dba/219003/not-authorized-on-admin-to-execute-command-mongodb-atlas-m0-free-tier-cluster?newreg=471a9a26108243d78d4ca74a87e7a115

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

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


0
Use Admin :
    use admin

Create a super user : 

    db.createUser(
    {
    user: "master",
    pwd: "test@123",
    roles: [ 
    { 
    role: "readWriteAnyDatabase", 
    db: "admin" 
    }, 
    {
    "role" : "dbAdminAnyDatabase",
    "db" : "admin"
    },
    {
    "role" : "clusterAdmin",
    "db" : "admin"
    },
    "userAdminAnyDatabase" 
    ]
    }
    )

このコードスニペットをありがとうございます。このコードスニペットは、限られた短期間のヘルプを提供する可能性があります。適切な説明これがなぜ問題の優れた解決策であるを示すことにより、長期的な価値を大幅に改善し、他の同様の質問を持つ将来の読者にとってより有用になるでしょう。答えを編集して、仮定を含めて説明を追加してください。
Toby Speight、

0

Centgo 7 for MongoDB 4.2でこれらの手順を実行しました。(リモートユーザー)

mongod.confファイルを更新する

vi /etc/mongod.conf
   net:
     port: 27017
     bindIp: 0.0.0.0 
   security:
     authorization: enabled

MongoDBサービスのデーモンを開始する

systemctl start mongod

MongoDBシェルを開く

mongo

シェルでこのコマンドを実行します

use admin
db.createUser(
  {
    user: 'admin',
    pwd: 'YouPassforUser',
    roles: [ { role: 'root', db: 'admin' } ]
  }
);

リモートrootユーザーが作成されました。これで、開発マシンから任意のMongoDB GUIツールを使用して、このデータベース接続をテストできます。同様ロボ3T


-10

これは、mongodb.confでnoAuth = trueを設定していないことが原因である可能性があります

# Turn on/off security.  Off is currently the default
noauth = true
#auth = true

これを設定した後、次を使用してサービスを再起動します

サービスmongod再起動


1
ユーザーは、承認の使用を開始したいので、auth = trueのコメントを外したことを明示的に言っています。なぜ認証を無効にすることを勧めるのですか?
Alex 75、

私はyaが問題を読んでいないと思います... OPは認証を必要としています。認証は、ユーザーを設定するためのs-hunterの応答とカスタム構成に接続するためのjremiの組み合わせです
ChrisN
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.