¿Cómo puedo ingresar a Mongo como superusuario o restablecer usuarios?

29

Estaba jugando con permisos y me bloqueé la base de datos Mongo. Estoy bastante seguro de que hice esto al intentar agregar explícitamente el acceso a una base de datos, pero en su lugar, sobrescribí solo permitiendo el permiso a la base de datos. Así que estoy efectivamente bloqueado de mi base de datos Mongo y todo lo que leo me dice cómo crear un súper usuario si tengo el privilegio de agregar usuario. En este momento no creo que tenga ningún usuario que tenga ese privilegio. ¿Hay alguna manera de ingresar a la base de datos como acceso total? Soy dueño del servidor y tengo acceso de root.

Tony
fuente

Respuestas:

38

Si se ha bloqueado, debe hacer lo siguiente:

  1. Detenga su instancia de MongoDB
  2. Elimine las opciones --auth y / o --keyfile de su configuración de MongoDB para deshabilitar la autenticación
  3. Inicie la instancia sin autenticación
  4. Edite los usuarios según sea necesario
  5. Reinicie la instancia con la autenticación habilitada
daveh
fuente
Eliminar la autenticación no fue suficiente, ¡gracias!
Andrei
14

Tuve un problema similar cuando creé un usuario sin agregar un superusuario primero. Los siguientes pasos ayudaron a resolver el problema:

  1. Abra el archivo de configuración de MongoDB usando sudo( sudo vi mongodb.conf).
    El archivo se puede encontrar en la /etc/carpeta.
  2. Comentario "auth = true".
  3. Detenga el servicio MongoDB ( sudo service mongod stop)
  4. Inicie el servicio MongoDB ( sudo service mongod start)
  5. Luego cree un superusuario "root" usando el siguiente comando:

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

    Para referencia https://docs.mongodb.com/manual/reference/built-in-roles/#superuser-roles

  6. Regresa y descomenta "auth=true". Detener e iniciar / reiniciar el servicio mongodb.

Divya Krishnan
fuente
No puedo agradecerte lo suficiente. Me he quedado atrapado tratando de resolver esto cuando cargué el proyecto en el servidor de desarrollo. Muchas gracias! :)
Woppi
Ídem. Los mensajes de error del servidor son espectacularmente inútiles en esto. ¡Gracias!
Tom
7

Si usa una réplica establecida con unkeyfile

Seguridad entre los miembros del conjunto de réplicas utilizando la autenticación interna

Keyfile se usa para la autenticación en la replicación.

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

Puede usar este comando para iniciar sesión como administrador de mongod:

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

Después puede crear o modificar su usuario administrador.

Rol interno

__systemMongoDB asigna esta función a los objetos de usuario que representan miembros del clúster, como los miembros del conjunto de réplicas y las instancias mongos. El rol da derecho a su titular a tomar cualquier medida contra cualquier objeto en la base de datos.

No asigne esta función a objetos de usuario que representen aplicaciones o administradores humanos, salvo en circunstancias excepcionales.

Ivanov
fuente
¿Dónde encontraste esta información?
Octoedro
2

Verifique las respuestas a esta pregunta, podrían ayudar

https://stackoverflow.com/questions/20117104/mongodb-root-user

Básicamente, si aún tiene acceso al servidor, puede acceder a la Adminbase de datos.

Hay más en esta página http://docs.mongodb.org/v2.4/reference/user-privileges/

Tenga en cuenta que la versión 2.6 cambia la forma en que esto funciona por completo. Para 2.6 necesitará pasar más tiempo con http://docs.mongodb.org/manual/security/

Meligy
fuente
1
Como se menciona en la publicación, esa es la única información que he podido encontrar. No tengo permisos para hacerlo
Tony
0

Debe detener Mongo, eliminar los archivos de administración y luego iniciar Mongo

sudo service mongod stop
mv /data/admin.* .
sudo service mongod start
Tony
fuente
2
Esto está destruyendo la base de datos de usuarios administrativos y permitiendo el acceso a través de "localHostExcetption", no es una buena forma de administrar usuarios cuando tiene un problema.
daveh