2013-05-23 11 views
13

Uruchamiam nową instancję mongo, tworzę użytkownika, autoryzuję, ale kiedy uruchomię "show collections", system mówi, że id nie jest autoryzowany. Nie wiem dlaczego?Niedozwolone dla zapytania na admin.system.namespaces na mongodb

# 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 

Odpowiedz

0

Chciałbym spróbować przyznać użytkownikowi rolę odczytu. userAdminAnyDatabase zapewnia możliwość administrowania użytkownikami.

13

Miałem ten sam problem, ale znalazłem ten samouczek i pomógł mi.

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

zastosowanie:

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

zamiast

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

to rozwiązać mój problem i ja Muszę powiedzieć, że może to być doskonały przykład kodu KISS (Keep It Simple, Stupid) – Max

7

miałem ten sam problem i to w jaki sposób mogę rozwiązać go:

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

Dla MongoDB versi na 2,6 użytku:

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

Zobacz docs

+0

Ta odpowiedź jest dokładna, ale zauważ, że OP był w wersji 2.4.3. –

8

Jak mówi Robert użytkownicy Administrator ma tylko prawa do administratora, aby nie pisać w bazach danych. Musisz więc utworzyć niestandardowego użytkownika dla swojej bazy danych. Jest wiele różnych sposobów. Wybrałem sposób dbOwner.

(używam Ubuntu Server, Mongo 2.6.3 i Robomongo)

Więc to zrobić, fisrt utworzyć użytkownika admin jak Mongo mówi:

typ mongo w skorupkach linux

i te polecenia w powłoce Mongo:

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

edytować plik conf Mongo z:

nano /etc/mongod.conf 

Możesz użyć vi, jeśli nano nie jest zainstalowany.

Aktywacja uwierzytelniania przez odkomentowane/dodanie tych linii auth=true

jeśli chcesz skorzystać z innej maszyny Robomongo zmienić linię bind_ip=127.0.0.1 przez bind_ip=0.0.0.0 (może należy dodać większą ochronę w produkcji).

typu Linux w powłoce:

service mongod restart 
mongo 

A Mongo osłonki:

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 nie jest to konieczne).

Jeśli chcesz spróbować, czy to działa, wpisz to w powłoce Mongo:

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

Powodzenia! Mam nadzieję, że to pomoże tobie i innym!

Mam wyszukiwać te informacje przez wiele godzin.

+1

Awesome :) najbardziej kompletna odpowiedź na temat konfigurowania auth kiedykolwiek widziana –

+1

@matteo: Twój komentarz trafia bezpośrednio do mojego serca ... mam nadzieję, że moja odpowiedź ci pomoże. dzięki. – doom

1

Rozwiązałem go jak tak dla MongoDB 2.6 + obecnie 3

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

uwaga, że ​​dla roli złożony zamiast userAdminAnyDatabase używamy korzeń

Powiązane problemy