Comment puis-je accéder à Mongo en tant que superutilisateur ou réinitialiser les utilisateurs?

29

Je jouais avec des autorisations et je me suis verrouillé hors de la base de données Mongo. Je suis à peu près sûr d'avoir fait cela en essayant d'ajouter explicitement l'accès à une base de données, mais à la place, j'ai remplacé uniquement l'autorisation de la base de données. Je suis donc effectivement exclu de ma base de données Mongo et tout ce que je lis me dit comment créer un super utilisateur si j'ai le privilège d'ajouter un utilisateur. Pour le moment, je ne pense pas avoir d'utilisateurs disposant de ce privilège. Existe-t-il un moyen d'entrer dans la base de données en tant qu'accès? Je possède le serveur et j'ai un accès root.

Tony
la source

Réponses:

38

Si vous vous êtes enfermé, vous devez procéder comme suit:

  1. Arrêtez votre instance MongoDB
  2. Supprimez les options --auth et / ou --keyfile de votre configuration MongoDB pour désactiver l'authentification
  3. Démarrer l'instance sans authentification
  4. Modifiez les utilisateurs selon vos besoins
  5. Redémarrez l'instance avec l'authentification activée
Daveh
la source
Supprimer l'authentification n'était pas suffisant, merci!
Andrei
14

J'ai eu un problème similaire lorsque j'ai créé un utilisateur sans ajouter d'abord un superutilisateur. Les étapes suivantes ont aidé à résoudre le problème:

  1. Ouvrez le fichier de configuration MongoDB à l'aide de sudo( sudo vi mongodb.conf).
    Le fichier se trouve dans le /etc/dossier.
  2. Commentez "auth = true".
  3. Arrêtez le service MongoDB ( sudo service mongod stop)
  4. Démarrez le service MongoDB ( sudo service mongod start)
  5. Créez ensuite un superutilisateur "root" en utilisant la commande ci-dessous:

    use admin
    
    db.createUser({user:"admin",pwd:"password",roles:[{role:"root",db:"admin"}]});

    Pour référence https://docs.mongodb.com/manual/reference/built-in-roles/#superuser-roles

  6. Revenez en arrière et décommentez "auth=true". Arrêtez et démarrez / redémarrez le service mongodb.

Divya Krishnan
la source
Je ne vous remercierai jamais assez. J'ai été coincé à essayer de comprendre cela lorsque j'ai téléchargé le projet sur le serveur de développement. Merci beaucoup! :)
Woppi
Idem. Les messages d'erreur du serveur sont extrêmement inutiles à ce sujet. Merci!
Tom
7

Si vous utilisez un jeu de réplicas avec unkeyfile

Sécurité entre les membres du jeu de réplicas à l'aide de l'authentification interne

Le fichier de clés est utilisé pour l'authentification dans la réplication.

security:
  keyFile: <path-to-keyfile>
replication:
  replSetName: <replicaSetName>

Vous pouvez utiliser cette commande pour vous connecter en tant qu'administrateur à mongod:

mongo -u __system -p "$(tr -d '\011-\015\040' < path-to-keyfile)" --authenticationDatabase local

Afterword vous pouvez créer ou modifier votre utilisateur administrateur.

Rôle interne

__systemMongoDB attribue ce rôle aux objets utilisateur qui représentent les membres du cluster, tels que les membres du jeu de réplicas et les instances de mongos. Le rôle autorise son titulaire à entreprendre toute action contre tout objet de la base de données.

N'attribuez pas ce rôle à des objets utilisateur représentant des applications ou des administrateurs humains, sauf dans des circonstances exceptionnelles.

Ivanov
la source
Où avez-vous trouvé cette information?
octoèdres
2

Vérifiez les réponses à cette question, elles pourraient vous aider

/programming/20117104/mongodb-root-user

Fondamentalement, si vous avez toujours accès au serveur, vous pourrez peut-être accéder à la Adminbase de données.

Il y a plus dans cette page http://docs.mongodb.org/v2.4/reference/user-privileges/

Notez que la version 2.6 change complètement la façon dont cela fonctionne. Pour 2.6, vous devrez passer plus de temps avec http://docs.mongodb.org/manual/security/

Meligy
la source
1
Comme mentionné dans le post, c'est la seule information que j'ai pu trouver. Je n'ai pas les autorisations pour le faire
Tony
0

Vous devez arrêter Mongo, supprimer les fichiers d'administration, puis démarrer Mongo

sudo service mongod stop
mv /data/admin.* .
sudo service mongod start
Tony
la source
2
Cela détruit la base de données des utilisateurs administratifs et autorise l'accès via "localHostExcetption", ce n'est pas un bon moyen d'administrer les utilisateurs en cas de problème.
daveh