web-dev-qa-db-fra.com

Comment ajouter un utilisateur administrateur à Mongo dans la version 2.6?

Je suis passé de la version 2.4 à la version 2.6 et l'authentification a échoué. Ce tutoriel semble assez simple, mais je continue à être bloqué hors de ma propre base de données. Ma situation est assez simple, je n’ai qu’un seul serveur Mongo et j’ai besoin d’une combinaison utilisateur/mot-clé pour me connecter.

Je me connecte d'abord via l'exception localehost mentionnée. Ensuite, je crée l'utilisateur admin comme suggéré:

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

Il est maintenant temps d'ajouter de nouveaux utilisateurs. Pour me vérifier, je me déconnecte de Shell. Maintenant, quand je tape "mongo", ça échoue. Cela fonctionnait auparavant mais bon, il ne voit pas de mot de passe d'utilisateur et je suppose que l'exception d'hôte localhost n'existe plus. Je suis donc les instructions décrites ici :

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

Et je reçois:

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" }
>

Toute idée sur la façon de:

  1. Installez Mongo 2.6 pour pouvoir entrer et sortir facilement du shell gérant les bases de données (je dirais que c'est l'administrateur système).

  2. Permettre à un utilisateur d'un client distant de se connecter? (Juste le côté mongo, aucune aide nécessaire avec iptables ...)

Merci!

15
Tony

Apparemment, "l'administrateur des utilisateurs du système" ne suffit pas. Créez un utilisateur root:

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

Ajoutez ensuite votre utilisateur de base de données:

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

Plus de détails sur this Gist . Commentaires sur Gist et meilleures réponses sur SO bienvenue - je ne suis pas un administrateur système

31
Tony

1) Le rôle que vous attribuez à l'administrateur admin-userAdminAnyDatabase - ne dispose pas de privilèges illimités. C'est simplement un rôle qui permet de créer et de gérer des utilisateurs sur n'importe quelle base de données. Apparemment, par défaut, il est interdit d’exécuter certaines commandes qui ne sont pas directement liées à la gestion des utilisateurs de base de données (telles que l’extrait des avertissements de démarrage dans le journal, l’interrogation de l’état du serveur, etc.).

Vous pouvez utiliser le rôle "racine" à la place, comme le suggère Tony. Si vous allez utiliser le compte root pour effectuer la configuration et la gestion, puis quelques comptes de base en lecture/écriture avec privilèges de base en conversation avec la base de données, cela semble probablement plus logique. 

2) En général, la connexion côté client nécessite simplement d’appeler la fonction db.authenticate () après la connexion à partir de votre code client. Cela dépend du pilote/de la langue que vous utilisez pour un client. Le code du pilote node.js est assez typique: http://mongodb.github.io/node-mongodb-native/api-generated/db.html#authenticate

1
user3369108

Même après avoir suivi la méthode de @ Tony, je recevais un 

`com.mongodb.CommandFailureException:`

Ajouter

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

dans la section Dépendance de BuildConfig.groovy a cependant résolu le problème.

0
Vinay