Wszyscy użytkownicy stworzeni w MongoDB 3.x są stworzeni za pomocą SCRAM-SHA1, co łamie wsteczną kompatybilność z narzędziami, które oczekują MongoDB-CR. Istnieje lista narzędzi i sterowników do prania, które nie zostały jeszcze zaktualizowane do obsługi SCRAM-SHA1, takie jak Robomongo i MongoVUE.
W niektórych przypadkach, nawet jeśli dostępna jest nowsza wersja sterownika/ORM, możesz nie być gotowy do uaktualnienia sterownika ze względu na pewne problemy ze zgodnością.
MongoDB obsługuje dwie metody uwierzytelniania:
- MongoDB- CR (odpowiedź na wyzwanie)
Mechanizm uwierzytelniania użytkowników za pomocą haseł. Domyślny mechanizm uwierzytelniania do wersji 2.6.x. Więcej informacji można znaleźć w dokumentacji. - SCRAM-SHA1
Jest to standard IETF dotyczący mechanizmów wezwania do odpowiedzi, służący do uwierzytelniania użytkowników za pomocą haseł. To jest nowszy i bezpieczniejszy system. Nie jest wstecznie kompatybilny z MongoDB-CR. Więcej informacji można znaleźć w dokumentacji.
MongoDB CR to starszy system uwierzytelniania. MongoDB 3.X zmienił domyślny system uwierzytelniania użytkowników na SCRAM-SHA1. Tak więc każdy nowy użytkownik utworzony w systemie jest użytkownikiem SCRAM-SHA1. Ponieważ SCRAM-SHA1 nie jest kompatybilny wstecznie, łamie autoryzację dla wszystkich użytkowników korzystających z mechanizmu MONGODB-CR.
Możesz jednak chcieć użyć nowego silnika pamięci masowej WiredTiger, który jest dostępny w MongoDB 3.x. Oto kroki, aby skonfigurować MONGODB-CR jako domyślny mechanizm uwierzytelniania w MongoDB 3.x, zakładając, że używasz zestawu replik:
- Utwórz klaster 3.x MongoDB.
- Zatrzymaj wszystkie węzły zestawu replik innych niż podstawowy.
- Wyłącz uwierzytelnianie na serwerze podstawowym i uruchom ponownie węzeł. Zrobiłem to, komentując następujące wpisy w pliku konfiguracyjnym MongoDB i ponownie uruchamiając serwer:
#security: # authorization: enabled # keyFile: /var/lib/mongo/rskey #replication: # replSetName: RS-rsname-0
- Połącz się z podstawowym i zmień wersję schematu:
use admin; var schema = db.system.version.findOne({"_id" : "authSchema"}); schema.currentVersion = 3; db.system.version.save(schema)
- Cofnij zmiany w pliku mongodb.conf w kroku 3 powyżej i uruchom ponownie MongoDB.
- Uruchom ponownie MongoDB w innych węzłach zestawu replik i upewnij się, że zestaw replik jest sprawny. Gdy to zrobisz, wszyscy użytkownicy utworzeni w systemie będą użytkownikami MongoDB-CR. Możesz to sprawdzić, wykonując następujące polecenie:
db.system.users.find().pretty();
Pamiętaj jednak, że powinno to być tylko tymczasowe obejście. Bezpieczniejszą długoterminową poprawką jest uaktualnienie serwera MongoDB do modelu SCRAM-SHA1. Gdy będziesz gotowy do aktualizacji, uruchom następujący skrypt, aby zaktualizować wersję schematu użytkowników do SCRAM-SHA1:
db.getSiblingDB("admin").runCommand({authSchemaUpgrade});