2014-04-11 9 views
13

Uaktualniłem od 2.4 do 2.6 i uwierzytelnienie się zepsuło. This tutorial wydaje się dość proste, ale wciąż jestem zablokowany z własnej bazy danych. Moja sytuacja jest dość prosta, mam jeden serwer Mongo i potrzebuję połączenia jednego użytkownika/pwd do połączenia.Jak dodać użytkownika administratora do Mongo w wersji 2.6?

Najpierw łączę się przez wyjątek localhost, jak wspomniano. Potem utworzyć użytkownika administracyjnego jak sugeruje:

use admin 
db.createUser(
    { 
    user: "myadmin", 
    pwd: "mysecret", 
    roles: 
    [ 
     { 
     role: "userAdminAnyDatabase", 
     db: "admin" 
     } 
    ] 
    } 
) 

Teraz nadszedł czas, aby dodać nowych użytkowników tak do normalności sprawdzić ja, wylogować się z powłoki. Teraz, gdy wpisuję "mongo", kończy się to niepowodzeniem. Że wykorzystywane do pracy, ale OK, to nie widząc hasło użytkownika i myślę, że wyjątek localhost już nie ma, więc postępuj zgodnie z instrukcjami podanymi here:

mongo --port 27017 -u myadmin -p mysecret --authenticationDatabase admin 

I otrzymujemy:

MongoDB shell version: 2.6.0 
connecting to: 127.0.0.1:27017/test 
Error while trying to show server startup warnings: not authorized on admin to execute command { getLog: "startupWarnings" } 
> 

Każdy pomysł, w jaki sposób:

  1. Konfiguracja Mongo 2.6, więc można łatwo wchodzić i wychodzić z muszli zarządzającej baz danych (bym, że to jest „user administrator systemu”)

  2. Umożliwia użytkownikowi połączenie z klienta zdalnego? (Tylko strona mongo, bez pomocy iptables ...)

Dzięki!

+1

Mam ten sam problem ... bardzo frustrujący, mimo że bardzo skrupulatnie przestrzegasz tutorialu. MongoDB musi poświęcić nieco uwagi swojej dokumentacji. – inorganik

Odpowiedz

29

Najwyraźniej "administrator systemu" nie jest wystarczający. Utwórz użytkownika root:

> db.createUser({user:"someadmin",pwd:"secret", roles:[{role:"root",db:"admin"}]}) 

Następnie dodać użytkownika bazy danych:

> use some_db 
> db.createUser(
    { 
     user: "mongouser", 
     pwd: "someothersecret", 
     roles: ["readWrite"] 
    } 
) 

Więcej szczegółów na this gist. Komentarze na temat istot i lepsze odpowiedzi na "Witamy" - nie jestem administratorem sys

+1

Rola 'userAdmin' powinna działać również wtedy, gdy nie potrzebujesz ekstremalnego wszystkiego -" root ". http://docs.mongodb.org/manual/reference/built-in-roles/#userAdmin – twiz

1

1) Rola przypisana użytkownikowi admin-userAdminAnyDatabase - nie ma nieograniczonych uprawnień. To tylko rola, która pozwala tworzyć i zarządzać użytkownikami w dowolnej bazie danych. Wygląda na to, że domyślnie jest on ograniczony wykonywaniem pewnych poleceń, które nie są bezpośrednio związane z zarządzaniem użytkownikami baz danych (takich jak pobieranie ostrzeżeń startowych z dziennika, sprawdzanie stanu serwera itp.).

Możesz użyć roli "root" zamiast tego, co sugeruje Tony. Jeśli zamierzasz używać konta root do konfiguracji i zarządzania, a następnie masz kilka podstawowych kont do odczytu/zapisu, rozmawiających z bazą danych, prawdopodobnie ma to sens.

2) Łączenie po stronie klienta wymaga po prostu wywołania funkcji db.authenticate() po połączeniu się z kodem klienta. Można to zrobić na różne sposoby w zależności od sterownika/języka używanego przez klienta. Węzeł.js kod sterownika jest dość typowe: http://mongodb.github.io/node-mongodb-native/api-generated/db.html#authenticate

0

Nawet po wykonaniu @ metody Tony'ego byłem coraz

`com.mongodb.CommandFailureException:` 

Dodawanie

compile 'org.mongodb:mongo-java-driver:2.13.1' 

w sekcji zależność BuildConfig.groovy jednak naprawił problem.

Powiązane problemy