2015-06-27 12 views
5

Mam instancję Bitnami MEAN działającą na EC2. Po wielu finalizacjach udało mi się połączyć z bazą danych za pomocą lokalnej powłoki. Stworzyłem uwierzytelnionych użytkowników z wszystkimi uprawnieniami niezbędnymi do uzyskania dostępu do danych, a po uruchomieniu poniższego kodu - jestem w stanie uzyskać dostęp do DB bez problemu.Mongo "auth failed" Tylko dla połączeń zdalnych. Local Works fine

sudo mongo admin -u <USERNAME-p <PASSWORD> 

Powiedział, że gdy próbuję powtórzyć to za pomocą połączenia zdalnego ja wielokrotnie daną się „auth failed” błąd z MongoDB.

mongo <HOST>:<PORT>/<DATABASE> -u <USERNAME> -p <PASSWORD> 

...

Jest to dziwne, ponieważ używam te same referencje jak ja w prowadzeniu lokalnej powłokę. Jedyna różnica polega na tym, że dołączam informacje o hoście i porcie. Od tego czasu potwierdziłem również, że moje zdalne połączenie działa, jeśli wyłączę parametr auth w mongodb.config.

mongo <HOST>:<PORT>/<DATABASE> 

Oczywiście w produkcji chcę być w stanie uwierzytelnić. Czy ktokolwiek z was ma sugestie, dlaczego istnieje rozbieżność między uwierzytelnianiem zdalnym i lokalnym?

Odpowiedz

23

Miałem do czynienia z tym samym problemem.

Problemem dla mnie jest:

Mój lokalny powłoki Mongo był v2.6.10. Używa metody uwierzytelniania o nazwie MONGODB-CR that has been deprecated.

Moja wersja serwera to v3.0.4. Używa metody uwierzytelniania o nazwie SCRAM-SHA-1.

Spróbuj sprawdzić lokalne wersje powłoki i zdalnym serwerze z:

mongo --version 
mongod --version 

Jeśli są one różne, uaktualnić lokalną powłokę do v3. (Musiałem odinstalować i zainstalować ponownie.)

+2

Dzięki! Zapomniałem, że napisałem o tym. Ale to był rzeczywiście problem. Cieszę się, że nie jestem jedynym, który został przez to zawieszony. –

+0

Uratowałeś moje godziny –

0

Wynika to głównie z przyczyn związanych z bezpieczeństwem.

Gdy masz dostęp do lokalnego środowiska, łatwo jest przypuszczać, że jesteś administratorem systemu lub programisty, ponieważ masz dostęp do samego komputera.

Jeśli nie masz dostępu do lokalnego komputera, nie możesz tego zagwarantować, a ponieważ bezpieczeństwo bazy danych jest bardzo ważne (w większości przypadków), nie ma sensu włączać dostępu zdalnego. Możesz oczywiście wyłączyć to, ale nie jest to zalecane.

Mam nadzieję, że pomogłem.

+0

Jak powinienem włączyć dostęp zdalny? –

+0

Jest to udokumentowane na wiki (wystarczy zmienić adres bindowania na 0.0.0.0): https://wiki.bitnami.com/Components/mongoDB#section_6 – marcosbc

+0

Tak. Próbowałem tego. Nie rozwiązuje problemu auth. Zmiana adresu powiązania pozwoliła mi uzyskać dostęp do zdalnego mongohosta dopiero po całkowitym wyłączeniu parametru auth w mongodb.config. Ale to nie rozwiązało problemu dotyczącego zdalnego dostępu. –

0

Zainstalować tę samą wersję zarówno na serwerze, jak i na kliencie rozwiązał problem dla mnie. Jak wyjaśniono powyżej @Alexandre, prawdopodobnie jest to problem szyfrowania haseł. MongoDB wersja 3.2.7

Próbowałem powodzeniem z dwóch metod:

mongo --host "your_host" --port "your_port" --username "your_user" --password "your_pass" --authenticationDatabase "your_admin_db" 

mongo "your_host:your_port/your_db" --username "your_user" --password "your_pass" --authenticationDatabase "your_admin_db" 

Poza tym, upewnij się, że serwer jest dostępny dla zdalnych dostępów. Zobacz szczegóły dotyczące sieci.bindIp na https://docs.mongodb.com/v3.2/reference/configuration-options/

1

Wcześniej być zainstalowanie wersji 3.2.12 MongoDB i był w stanie połączyć się ze zdalnym przykład przy użyciu:

mongo -u ‘<USERNAME>’ -p ‘<PASSWORD>’ --host <REPLICA_SET>/<HOST>:<PORT> admin 

tworzę nowy klaster z wersji 3.4.2 i nie był w stanie połączyć się z tym samym poleceniem. Po wypróbowaniu wielu różnych opcji udało mi się wreszcie wymyślić, że muszę dodać - authenthenticationDatabase przed administracją bazy danych.

mongo -u ‘<USERNAME>’ -p ‘<PASSWORD>’ --host <REPLICA_SET>/<HOST>:<PORT> --authenticationDatabase admin 
0

Tylko w przypadku, gdy ktoś wpadnie na ten sam problem, authenticationDatabase jest wymagane tylko wtedy, gdy tworzony użytkownikowi w innej bazie danych. Jeśli utworzysz użytkownika w bazie danych, z którą się łączysz, żadnych problemów.

Bądź więc ostrożny: użyj, a następnie utwórz użytkownika.

Jeśli zdarzy ci się utworzyć użytkownika w administracyjnej bazie danych, to tak, potrzebujesz flagi authenticationDatabase.

Powiązane problemy