MongoDB-admin user no authorized

Próbuję dodać autoryzację do mojego MongoDB.
Wszystko to robię na Linuksie z MongoDB 2.6.1.
Mój mongod.plik conf jest w starym formacie kompatybilności
(tak to się stało z instalacją).

1) utworzyłem użytkownika admin, jak opisano tutaj w (3)

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

2) potem edytowałem mongod.conf by commenting this line

auth = true

3) W końcu zrestartowałem serwis mongod i próbowałem się zalogować:

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

4) mogę się połączyć, ale mówi to po podłączeniu.

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) teraz wygląda na to, że ten sa użytkownik, który stworzyłem, nie ma żadnych uprawnień.

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 >>>

W czym problem? Powtórzyłem ten cały zabieg 3 razy i
Myślę, że zrobiłem to wszystko zgodnie z dokumentami MongoDB. Ale to nie działa.
Spodziewałem się, że ten użytkownik sa będzie upoważniony do robienia czegokolwiek, aby
może wtedy tworzyć innych użytkowników i daj im bardziej konkretne uprawnienia.

 124
Author: peter.petrov, 2014-05-30

9 answers

Ja również drapałem się po głowie wokół tego samego problemu, i wszystko działało po ustawieniu roli jako root podczas dodawania pierwszego użytkownika admin.

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

Aby uzyskać pełne odniesienie do ustawień uwierzytelniania, Zobacz kroki skompilowałem Po godzinach badań przez internet.

 296
Author: s-hunter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-06 13:23:20

To trochę mylące - uważam, że będziesz musiał przyznać sobie readWrite, aby odpytywać bazę danych. Użytkownik z dbadmin lub useradmin może administrować bazą danych (w tym przyznać sobie dodatkowe prawa), ale nie może wykonywać zapytań ani zapisywać danych.

Więc przyznaj sobie readWrite i powinno być dobrze -

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

 29
Author: John Petrone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-30 01:26:54

Być może Szybki przykład jak zmienić obecnego użytkownika będzie dla kogoś pomocny. Tego właśnie szukałem.

Za radą @ JohnPetrone dodałem readWrite rolę do mojego admina z grantRolesToUser

> use admin
> db.grantRolesToUser("admin",["readWrite"])
> show collections
system.users
system.version
 25
Author: Bart C,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-04 14:21:12

Możesz spróbować: użycie flagi --authenticationDatabase pomaga.

mongo --port 27017 -u "admin" -p "password" --authenticationDatabase "admin"
 15
Author: jremi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-22 23:14:58

Wiem, że ta odpowiedź pojawi się bardzo późno w tym wątku, ale mam nadzieję, że ją sprawdzisz.

Powód, dla którego dostajesz ten błąd, opiera się na konkretnej roli, którą przyznałeś użytkownikowi, którą już zebrałeś, i tak nadanie temu użytkownikowi roli root rozwiąże twój problem, ale musisz najpierw zrozumieć, co dokładnie robią te role, zanim przyznasz je użytkownikom.

W tutorialu przyznałeś użytkownikowi rolę userAdminAnyDatabase, która w zasadzie daje użytkownikowi możliwość zarządzania użytkownikami ze wszystkich Twoich baz danych. To, co próbowałeś zrobić ze swoim użytkownikiem, wykracza poza jego definicję roli.

Rola root ma tę rolę w swojej definicji, a także readWriteAnyDatabase, dbAdminAnyDatabase i inne role czyniące go superużytkownikiem(w zasadzie dlatego, że można z nim zrobić wszystko).

Możesz sprawdzić definicje ról, aby zobaczyć, które role będą potrzebne użytkownikom do wykonania określonych zadań. https://docs.mongodb.com/manual/reference/built-in-roles / To nie jest wskazane aby wszyscy użytkownicy byli super:)

 6
Author: el Punch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-16 21:04:01

Ponadto zauważ, że jeśli twój Klient powłoki Mongo nie połączy się poprawnie z instancją mongod, możesz otrzymać takie błędy "Odmowa uprawnień".

Upewnij się, że klient otworzy połączenie, sprawdzając port połączenia, ale także, że port, którego używasz, nie jest używany. Możesz ustawić inny port używając parametru --port <port> zarówno w powłoce, jak i w procesie.

 0
Author: Nick Louloudakis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-26 14:13:01

To proste pytanie.

  1. ważne jest, aby zmienić docelowy db , A NIE admin.

Użyj yourDB

  1. Sprawdź swoje uwierzytelnienie db przez

Pokaż użytkowników

  1. Jeśli otrzymasz {} pusty obiekt, który jest pytaniem. Wystarczy wpisać

Db.createUser( { user: "yourUser", pwd: "hasło", role: ["readWrite", " dbAdmin" ] } )

LUB

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

 0
Author: cocoTW,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-27 11:52:30

Miałem podobny problem w środowisku Windows: zainstalowałem Bitnami DreamFactory i instaluje również inny MongoDb, który jest uruchamiany podczas rozruchu systemu. Uruchomiłem moją usługę MongoDbService (która została uruchomiona bez żadnego błędu), ale zauważyłem po utracie dużo czasu, że w rzeczywistości łączyłem się z usługą MongoDB Bitnami. Sprawdź, czy na twoim serwerze nie działa żadna inna instancja mongoDB.

Powodzenia!

 -1
Author: ibirite,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-07 19:39:57

Może to być spowodowane tym, że nie ustawiłeś noAuth=true w mongodb.conf

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

Po ustawieniu tej opcji Uruchom ponownie usługę używając

Service mongod restart

 -5
Author: Buminda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-22 05:17:40