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?
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/
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.
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.
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'
Dans MongoDB 3.0, il prend désormais en charge plusieurs mécanismes d'authentification.
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.
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.
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);
});
La bonne façon de se connecter à mongo Shell est
mongo localhost: 27017 -u 'uuuuu' -p '> xxxxxx' --authenticationDatabase nombase
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).
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.
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 use
ing 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.
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.