2014-05-05 11 views
20

Mam istniejący serwer testowy z uruchomionym mongodb 2.6 na Ubuntu. Ta sama wersja działa na moim macbooku. W obu komputerach uaktualniłem z mongodb 2.4 przy użyciu standardowych mechanizmów aktualizacji. Teraz muszę skonfigurować uwierzytelnianie oparte na nazwie użytkownika i haśleJak dodać uwierzytelnianie do mongody 2.6?

Na moim komputerze Mac zaktualizowałem mongodb do wersji 2.6 przy użyciu aktualizacji parzenia. I

Próbowałem następujące polecenie na komputerze Mac

$mongo 
>db.getSiblingDatabase('admin') 
>db.createUser({user:"root", pwd:"mycomplexpassword", roles:[ "userAdminAnyDatabase", "readWrite" ] }) 

mam następujący błąd

Error: couldn't add user: User and role management commands require auth data to have schema version 3 but found 1 at src/mongo/shell/db.js:1004 

Dlatego nie jestem w stanie włączyć auth do MongoDB. Jak rozwiązać problem? Googling dla tego błędu nie wydaje się teraz nic przydatnego.

PS: Czy należy się spodziewać pojawienia się tego samego problemu, gdy dodaję uwierzytelnianie do mongodb na moich serwerach?

+0

Chodź człowieku! Który idiota chce teraz być zamknięty? Co jest nie tak z tym pytaniem? –

+0

To samo stało się z moim poprzednim pytaniem. Zadaję bardzo konkretne pytanie, czyż nie? –

+0

można zobaczyć bilet wydania mongodb: https://jira.mongodb.org/browse/SERVER-12893 – study

Odpowiedz

30

Schemat db.system.users w mongodb 2.4 i 2.6 jest inny, co spowodowało, że nie udało się utworzyć nowego użytkownika.

2.4 schemat

db.system.users.find() 
{ 
    "_id" : ObjectId("53675bc48ff842a0657e25ff"), 
    "user" : "root", 
    "pwd" : "c2ff9601c8590812f0d40b9f60869679", 
    "roles" : [ 
     "userAdminAnyDatabase", 
     "readWrite" 
    ] 
} 

2,6 schematu

db.system.users.find() 
{ 
    "_id" : "admin.root", 
    "user" : "root", 
    "db" : "admin", 
    "credentials" : { 
     "MONGODB-CR" : "c2ff9601c8590812f0d40b9f60869679" 
    }, 
    "roles" : [ 
     { 
      "role" : "userAdminAnyDatabase", 
      "db" : "admin" 
     }, 
     { 
      "role" : "readWrite", 
      "db" : "admin" 
     } 
    ] 
} 

Nie mogę znaleźć oficjalną drogę do ich konwersji. Konieczne może być ręczne przekonwertowanie danych 2.4 w formacie db.system.users do 2.6 lub usunięcie wszystkich starych użytkowników w wersji 2.4 i odtworzenie ich w wersji 2.6.

Możesz użyć poniższego polecenia, aby dokonać aktualizacji.

db.getSiblingDB("admin").runCommand({authSchemaUpgrade: 1 });

Referencje:

  1. Upgrade User Authorization Data to 2.6 Format
  2. Sobolev Eugene's answer
+0

Jak usunąć wszystkich użytkowników? –

+3

przełączanie bazy danych na admin 'use admin' i usuwanie wszystkich użytkowników' db.system.users.remove ({}) ' – study

24

Spróbuj tego polecenia w konsoli Mongo

db.getSiblingDB("admin").runCommand({authSchemaUpgrade: 1 }); 

Upgrade authorization schema.

+1

To wygląda na lepszą odpowiedź :) – study

0

My MongoDB wersja 2.6.5 Issue poniżej polecenia

db.system.version.update({}, {$set: {currentVersion: 3}});

+0

To polecenie nie działa dla mnie, ale' db. getSiblingDB ("admin"). runCommand ({authSchemaUpgrade: 1}); 'zrobił. –

2

myślę powyższe odpowiedzi są prawidłowe, ale co sprawiło, że praca dla mnie były kroki następne (FYI, jestem na wersja 2.6.8):

1.Run w Mongo:

db.system.version.update({}, {$set: {currentVersion: 3}}); 

2.Uruchom w Mongo:

db.getSiblingDB("admin").runCommand({authSchemaUpgrade: 1 }); 

3.Run w Mongo:

db.createUser(
    { 
    user: “your_user_name”, 
    pwd: “your_password”, 
    roles: [ { role: "userAdminAnyDatabase", db:"admin" } ] 
    } 
) 
  1. Dodaj poniższe linie do /usr/local/etc/mongod.conf

    auth=true

  2. restart Mongo:

    mongod --dbpath /data/db

  3. Go zapłacić na Mac i login (również zauważyć pojedyncze cytaty wokół nazwy użytkownika i hasła):

    mongo admin -u 'your_use_name' -p 'your_password'