web-dev-qa-db-fra.com

Impossible de s'authentifier sur mongo, "auth fail"

J'ai créé un utilisateur administrateur pour Mongo en utilisant les instructions suivantes:

http://docs.mongodb.org/manual/tutorial/add-user-administrator/

D'après le client mongo, il semble que je puisse m'authentifier:

> use admin
switched to db admin
> db.auth('admin','SECRETPASSWORD');
1
>

Mais je ne peux pas me connecter autrement. Par exemple:

mongo -u admin -p SECRETPASSWORD

donne l'erreur:

L'exécution de JavaScript a échoué: Erreur: 18 {code: 18, ok: 0.0, errmsg: "auth failed"} à src/mongo/Shell/db.js: L228

J'ai auth = true dans etc/mongod.conf.

Qu'est-ce que je rate?

73
justkevin

L'authentification est gérée au niveau de la base de données. Lorsque vous essayez de vous connecter au système à l'aide d'une base de données, mongo vérifie les informations d'identification fournies dans la collection <database>.system.users. Ainsi, lorsque vous essayez de vous connecter à "test", il recherche les informations d'identification dans test.system.users et renvoie une erreur car il ne peut pas les trouver (car elles sont stockées dans admin.system.users). Avoir le droit de lire et d'écrire à partir de toutes les bases de données ne signifie pas que vous pouvez vous connecter directement à eux.

Vous devez d'abord vous connecter à la base de données contenant les informations d'identification. Essayer:

mongo admin -u admin -p SECRETPASSWORD

Pour plus d'informations, consultez cette http://docs.mongodb.org/manual/reference/privilege-documents/

81
gilo

J'ai également reçu cette erreur, ce dont j'avais besoin était de spécifier la base de données dans laquelle les données d'authentification de l'utilisateur étaient stockées: 

mongo -u admin -p SECRETPASSWORD --authenticationDatabase admin

Mise à jour du 18 novembre 2017:

mongo admin -u admin -p

est une meilleure solution. Mongo vous demandera votre mot de passe pour que vous ne mettiez pas votre mot de passe en texte clair dans l'historique de Shell, ce qui constitue une pratique de sécurité redoutable.

59
Chad E.

Vous devrez peut-être mettre à jour votre shell mongo. J'avais la version 2.4.9 du shell mongo localement et j'ai eu cette erreur en essayant de me connecter à une base de données mongo 3. La mise à niveau de la version Shell vers la version 3 a résolu le problème.

36
lmyers

Je sais que cela peut sembler évident, mais je devais aussi utiliser une seule citation autour de u/n et p/w avant que cela fonctionne

mongo admin -u 'utilisateur' -p 'mot de passe'

27
user3609666

Dans MongoDB 3.0, il prend désormais en charge plusieurs mécanismes d'authentification. 

  1. Défi et réponse MongoDB (SCRAM-SHA-1) - valeur par défaut dans la version 3.0
  2. MongoDB Challenge and Response (MONGODB-CR) - valeur par défaut précédente (<3.0)

Si vous aviez commencé avec une nouvelle base de données 3.0 avec de nouveaux utilisateurs créés, ils auraient été créés avec SCRAM-SHA-1.

Vous aurez donc besoin d’un pilote capable de cette authentification:

http://docs.mongodb.org/manual/release-notes/3.0-scram/#considerations-scram-sha-1-drivers

Si vous aviez une base de données mise à niveau depuis la version 2.x avec les données utilisateur existantes, elles utiliseraient toujours MONGODB-CR et la base de données d'authentification d'utilisateur devrait être mise à niveau:

http://docs.mongodb.org/manual/release-notes/3.0-scram/#upgrade-mongodb-cr-to-scram

Maintenant, vous devez vous connecter à MongoDB 3.0 avec des utilisateurs créés avec SCRAM-SHA-1 pour spécifier la base de données d'authentification (via le client Mongo en ligne de commande) et utiliser d'autres mécanismes si vous utilisez un pilote.

$> mongo -u USER -p PASSWORD --authenticationDatabase admin

Dans ce cas, la base de données "admin", qui est également la valeur par défaut, sera utilisée pour l'authentification.

16
Lee Parayno

Il apparaît le problème est qu'un utilisateur créé via la méthode décrite dans la documentation de mongo n'a pas l'autorisation de se connecter à la base de données par défaut (test), même si cet utilisateur a été créé avec "userAdminAnyDatabase" et "dbAdminAnyDatabase" rôles.

13
justkevin

Cela a résolu mon problème:

Allez au terminal Shell et tapez mongo.

Puis tapez use db_name.

Puis tapez:

 db.createUser(
   {
     user: "mongodb",
     pwd: "dogmeatsubparflavour1337",
     roles: [ { role: "dbOwner", db: "db_name" } ]
   }
 )

Essayez aussi: db.getUsers()

Échantillon rapide:

const MongoClient = require('mongodb').MongoClient;

// MongoDB Connection Info
const url = 'mongodb://mongodb:[email protected]:27017/?authMechanism=DEFAULT&authSource=db_name';
// Additional options: https://docs.mongodb.com/manual/reference/connection-string/#connection-string-options

// Use Connect Method to connect to the Server
MongoClient.connect(url)
  .then((db) => {
    console.log(db);
    console.log('Casually connected correctly to server.');
    // Be careful with db.close() when working asynchronously
    db.close();
  })
  .catch((error) => {
    console.log(error);
  });
12
agm1984

La bonne façon de se connecter à mongo Shell est 

mongo localhost: 27017 -u 'uuuuu' -p '> xxxxxx' --authenticationDatabase nombase

2
Rifaideen

C'est un peu un cas spécifique, mais au cas où quelqu'un arriverait avec mon problème:

Dans MongoHQ, il vous montrera un champ appelé "mot de passe", mais il ne s'agit en réalité que du hachage du mot de passe. Vous devrez ajouter un nouvel utilisateur et stocker le mot de passe ailleurs (car MongoHQ ne vous le montrera pas).

2
maxko87

Vous pouvez aussi essayer ceci: -

mongo localhost:27017/admin -u admin -p SECRETPASSWORD

Trouvé dans ce post

Ici, évidemment, localhost peut être un autre hôte et / admin peut être une autre base de données sur laquelle l'authentification a été appliquée. 

1
Kelsnare

Autre possibilité: lors de la création de l'utilisateur, vous avez peut-être accidentellement été use dans une base de données autre que admin ou autre que celle que vous souhaitiez. Vous devez définir --authenticationDatabase sur la base de données sous laquelle l'utilisateur a été créé.

mongodb semble vous mettre par défaut dans la base de données test lorsque vous ouvrez le shell. Vous devez donc écrire --authenticationDatabase test plutôt que --authenticationDatabase admin si vous étiez accidentellement useing test lorsque vous avez exécuté db.createUser(...).

En supposant que vous ayez accès à la machine qui exécute l’instance mongodb, y pourrait désactiver l’autorisation dans /etc/mongod.conf (commenter authorization qui est imbriquée sous sécurité), puis redémarrer votre serveur, puis exécuter:

mongo
show users

Et vous pourriez obtenir quelque chose comme ça:

{
    "_id" : "test.myusername",
    "user" : "myusername",
    "db" : "test",
    "roles" : [
        {
            "role" : "dbOwner",
            "db" : "mydatabasename"
        }
    ],
    "mechanisms" : [
        "SCRAM-SHA-1",
        "SCRAM-SHA-256"
    ]
}

Notez que la valeur db est égale à test. C'est parce que lorsque j'ai créé l'utilisateur, je n'avais pas exécuté use admin ni use desiredDatabaseName. Vous pouvez donc supprimer l'utilisateur avec db.dropUser("myusername"), puis créer un autre utilisateur dans la base de données souhaitée, comme ceci:

use desiredDatabaseName
db.createUser(...)

J'espère que cela aidera quelqu'un qui était dans ma position de noob avec ce genre de choses.

0
user993683

Recherchez la version Mongo du client à partir duquel nous nous connectons au serveur Mongo.

Mon cas, le serveur mongo était de la version Mongo4.0.0 mais mon client était de la version 2.4.9. Mettez à jour la version de mongo pour mettre à jour mongo cli.

0
Sandy