2013-05-23 8 views
13

私は新しいmongoインスタンスを作成し、ユーザーを作成して承認しますが、 "show collections"を実行すると、IDは承認されていません。何故かはわからない?mongodbのadmin.system.namespacesでの照会が許可されていません

# mongo admin 
MongoDB shell version: 2.4.3 
connecting to: admin 
Server has startup warnings: 
Thu May 23 18:23:56.735 [initandlisten] 
Thu May 23 18:23:56.735 [initandlisten] ** NOTE: This is a 32 bit MongoDB binary. 
Thu May 23 18:23:56.735 [initandlisten] **  32 bit builds are limited to less than 2GB of data (or less with --journal). 
Thu May 23 18:23:56.735 [initandlisten] **  See http://dochub.mongodb.org/core/32bit 
Thu May 23 18:23:56.735 [initandlisten] 
> db = db.getSiblingDB("admin") 
admin 
> db.addUser({user:"sa",pwd:"sa",roles:["userAdminAnyDatabase"]}) 
{ 
     "user" : "sa", 
     "pwd" : "75692b1d11c072c6c79332e248c4f699", 
     "roles" : [ 
       "userAdminAnyDatabase" 
     ], 
     "_id" : ObjectId("519deedff788eb914bc429b5") 
} 
> show collections\ 
Thu May 23 18:26:50.103 JavaScript execution failed: SyntaxError: Unexpected token ILLEGAL 
> show collections 
Thu May 23 18:26:52.418 JavaScript execution failed: error: { 
     "$err" : "not authorized for query on admin.system.namespaces", 
     "code" : 16550 
} at src/mongo/shell/query.js:L128 
> db.auth("sa","sa") 
1 
> show collections 
Thu May 23 18:27:22.307 JavaScript execution failed: error: { 
     "$err" : "not authorized for query on admin.system.namespaces", 
     "code" : 16550 
} at src/mongo/shell/query.js:L128 

答えて

0

私は読者の役割をユーザーに許可しようとします。 userAdminAnyDatabaseは、ユーザーを管理する機能を許可します。

13

私は同じ問題を抱えていましたが、このチュートリアルが見つかりました。

http://www.hacksparrow.com/mongodb-add-users-and-authenticate.html

使用:

db.addUser('sa', 'sa') 

代わりの

db.addUser({user:"sa",pwd:"sa",roles:["userAdminAnyDatabase"]}) 
{ 
     "user" : "sa", 
     "pwd" : "75692b1d11c072c6c79332e248c4f699", 
     "roles" : [ 
       "userAdminAnyDatabase" 
     ], 
     "_id" : ObjectId("519deedff788eb914bc429b5") 
} 
+0

を使用することを+現在3

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

ノートのようにそれを解決これはKISS(Keep It Simple、Stupid)コーディングの完璧な例になると言います。 – Max

7

私は同じ問題を抱えていたし、これは私がそれを解決する方法である:MongoDBのversiについては

db = db.getSiblingDB('admin') 
db.addUser( 
    { user: "mongoadmin", 
     pwd: "adminpass", 
     roles: ['clusterAdmin', 'userAdminAnyDatabase', 'readAnyDatabase'] }) 
3

2.6使用上:

db.createUser(
{ 
    user: "testUser" 
    pwd: "password", 
    roles: [{role: "readWrite", db:"yourdatabase"}] 
}) 

ロバートが言うように管理ユーザー、docs

+0

この回答は正確ですが、OPはバージョン2.4.3を使用していました。 –

8

を参照してくださいは、データベースに書き込まないよう、管理者にのみ権限を持っています。 データベースのカスタムユーザーを作成する必要があります。さまざまな方法があります。私はdbOwnerの方法を選択しました。

タイプmongo Linuxのシェルで

と:

だから、これを行うために、モンゴが言うようにファースト・あなたの管理者ユーザーを作成します(私はUbuntuのサーバ、モンゴ2.6.3およびRobomongoは使用します)モンゴシェルでこれらのコマンド:

use admin 
db.createUser({user:"mongoadmin",pwd:"chooseyouradminpassword",roles:[{role:"userAdminAnyDatabase",db:"admin"}]}) 
db.auth("mongoadmin","chooseyouradminpassword") 
exit 

編集のmongo confファイルで:

nano /etc/mongod.conf 

nanoがインストールされていない場合は、viを使用できます。

アクティブ認証アンコメント/あなたが(多分あなたは本番でより多くの保護を追加する必要があります)bind_ip=0.0.0.0によってラインbind_ip=127.0.0.1を変更する他のマシンからRobomongoを使用したい場合は、これらのラインauth=true

を追加します。 Linuxシェルで

タイプ:

service mongod restart 
mongo 

そしてMongoのシェルで:

use admin 
db.auth("mongoadmin","pwd:"chooseyouradminpassword") 
use doomnewdatabase 
db.createUser({user:"doom",pwd:"chooseyourdoompassword",customData:{desc:"Just me as I am"},roles : [{role:"dbOwner",db:"doomnewdatabase"}]}) 
db.auth("doom","chooseyourdoompassword") 
show collections 

(customDataが必要とされません)。

あなたはそれが動作するかどうか試してみたい場合は、モンゴシェルで次のように入力します。

db.products.insert({ item: "card", qty: 15 }) 
show collections 
db.products.find() 

幸運を!それがあなたと他の人を助けることを願っています!

私はこの情報を数時間検索しました。

+1

恐ろしい:)私が今までに見たauthを設定する最も完全な答え –

+1

@matteo:あなたのコメントは私の心に直接行きます...私の答えがあなたを助けてくれることを願っています。ありがとう。 – doom

1

私はそう のMongoDB 2.6 の代わりに提出し役割 userAdminAnyDatabaseのために、我々はこれが私の問題と私を解くルート

関連する問題