Próbuję dodać autoryzację do mojego MongoDB.
Robię to wszystko na Linuksie z MongoDB 2.6.1.
Mój plik mongod.conf jest w starym formacie zgodności
(tak właśnie przyszedł z instalacją).
1) Utworzyłem użytkownika administratora zgodnie z opisem w (3)
http://docs.mongodb.org/manual/tutorial/add-user-administrator/
2) Następnie edytowałem mongod.conf, odkomentowując tę linię
auth = true
3) W końcu ponownie uruchomiłem usługę mongod i próbowałem zalogować się za pomocą:
/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, sa
że utworzony przeze mnie użytkownik 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 >>>
Jaki jest problem? Powtórzyłem całą procedurę 3 razy i
myślę, że zrobiłem to wszystko zgodnie z dokumentacją MongoDB. Ale to nie działa.
Oczekiwałem, że ten sa
użytkownik zostanie upoważniony do robienia czegokolwiek, aby
mógł następnie tworzyć innych użytkowników i udzielać im bardziej szczegółowych uprawnień.
Odpowiedzi:
Drapałem się też nad tym samym problemem i wszystko działało po tym, jak ustawiłem rolę roota podczas dodawania pierwszego użytkownika administratora.
Jeśli już utworzyłeś
admin
użytkownika, możesz zmienić rolę w następujący sposób:Aby uzyskać pełne odniesienie do ustawień uwierzytelniania, zobacz kroki , które skompilowałem po wielu godzinach badań w Internecie.
źródło
userAdminAnyDatabase
zamiast tego wprowadzają dokumentacjęroot
?db.grantRolesToUser('admin',[{ role: "root", db: "admin" }])
db.grantRolesToUser('admin',[{ role: "root", db: "admin" }])
i to mnie dezorientuje. Nie mam uprawnień do uruchomienia polecenia, a jednak mogę uruchomić polecenie, aby się zrootować, a następnie uruchomić to polecenie. Bardzo dziwne: Sdb.grantRolesToUser('admin',[{ role: "root", db: "admin" }])
nie działało, upewnij się, że przełączyłeś się z powrotem nause admin
... miał ten sam problem, po przełączeniu działał jak urokTo trochę mylące - wierzę, że będziesz musiał udzielić sobie readWrite w celu przeszukiwania bazy danych. Użytkownik z dbadmin lub useradmin może administrować bazą danych (w tym przyznając sobie dodatkowe prawa), ale nie może wykonywać zapytań ani zapisywać danych.
więc przyznaj sobie readWrite i powinieneś być w porządku -
http://docs.mongodb.org/manual/reference/built-in-roles/#readWrite
źródło
Być może szybki przykład zmiany obecnego użytkownika będzie dla kogoś pomocny. Tego właśnie szukałem.
Zgodnie z radą @JohnPetrone dodałem rolę readWrite do mojego administratora z grantRolesToUser
źródło
Możesz spróbować: Użycie flagi --authenticationDatabase pomaga.
źródło
Wiem, że ta odpowiedź nadchodzi bardzo późno w tym wątku, ale mam nadzieję, że ją sprawdzicie.
Powód, dla którego pojawia się ten błąd, zależy od konkretnej roli, którą nadałeś użytkownikowi, którą już zgromadziłeś, i tak, przyznanie temu użytkownikowi roli
root
rozwiąże Twój problem, ale musisz najpierw zrozumieć, co dokładnie te role pełnią przed przyznaniem mu roli dla użytkowników.W samouczku przyznałeś użytkownikowi
userAdminAnyDatabase
rolę, która zasadniczo umożliwia mu zarządzanie użytkownikami wszystkich twoich baz danych. To, co próbujesz zrobić z użytkownikiem, wykraczało poza jego definicję roli.root
Rola ma tę rolę definicji zawartej w nim, jak równieżreadWriteAnyDatabase
,dbAdminAnyDatabase
i innych ról czyniąc mu superużytkownika (głównie dlatego, że można zrobić coś z niego).Możesz sprawdzić definicje ról, aby zobaczyć, które role będą potrzebne, aby umożliwić użytkownikom wykonywanie określonych zadań. https://docs.mongodb.com/manual/reference/built-in-roles/ Nie zaleca się, aby wszyscy użytkownicy byli super :)
źródło
show collections
), powinieneś dać mu tę możliwość i nic więcejroles: [ { role: "read", db: "admin" } ]
. Zauważ, że rola tutaj jest czytana, jest to specyficzne dla bazy danych i nie możesz zrobić nic poza tym. Sprawdź ten link, aby zobaczyć inne role docs.mongodb.com/manual/reference/built-in-rolesTo proste pytanie.
lub
źródło
Miałem podobny problem tutaj w środowisku Windows: Zainstalowałem Bitnami DreamFactory, a także instaluje inny MongoDb, który jest uruchamiany podczas uruchamiania systemu. Uruchomiłem moją usługę MongoDbService (która została uruchomiona bez żadnego błędu), ale zauważyłem po stracie dużo czasu, że w rzeczywistości łączyłem się z usługą MongoDb Bitnami. Sprawdź, czy na Twoim serwerze nie ma innej instancji mongoDB.
Powodzenia!
źródło
Ponadto zauważ, że jeśli klient powłoki mongo nie połączy się poprawnie z
mongod
instancją, możesz otrzymać takie błędy „Odmowa dostępu”.Upewnij się, że klient otwiera połączenie, sprawdzając port połączenia, ale także, że port, którego używasz,
mongod
nie jest używany. Możesz ustawić inny port, używając--port <port>
parametru zarówno w powłoce, jak i procesie.źródło
Miałem ten problem, ponieważ nazwa hosta w moim kompasie MongoDB wskazywała zamiast tego administratora dla mojego projektu. Naprawiono, dodając / projectname po nazwie hosta :) Wypróbuj to:
Użyj również tego samego ciągu połączenia w kodzie:
Powodzenia.
źródło
źródło
Zgodził się na uwierzytelnienie w bazie danych administratora i potrzebuje co najmniej roli z odpowiednimi uprawnieniami, która pozwoliłaby uniknąć „wyjątku hosta lokalnego” z bazy danych DB (dotyczy to hostowanej lokalnie bazy danych mongoDB), chociaż masz wszystko na swoim miejscu i nadal uzyskiwanie nieautoryzowanych wyjątków dla prawie każdej komendy, podczas uzyskiwania dostępu do mongoDB, które zostały utworzone za pomocą Mongo Atlas , oto miejsce, w którym możesz znać powód, dlaczego:
/dba/219003/not-authorized-on-admin-to-execute-command-mongodb-atlas-m0-free-tier-cluster?newreg=471a9a26108243d78d4ca74a87e7a115
a także sprawdź to, jeśli hostowałeś mongoDB w Mongo Atlas :
https://docs.atlas.mongodb.com/unsupported-commands/
źródło
źródło
Może to być spowodowane tym, że nie ustawiłeś noAuth = true w mongodb.conf
Po ustawieniu tego zrestartuj usługę za pomocą
usługa Mongod restart
źródło