Creé un usuario administrador para mongo usando estas instrucciones:
http://docs.mongodb.org/manual/tutorial/add-user-administrator/
Desde el cliente mongo, parece que puedo autenticarme:
> use admin
switched to db admin
> db.auth('admin','SECRETPASSWORD');
1
>
Pero no puedo conectarme de otra manera. Por ejemplo:
mongo -u admin -p CONTRASEÑA SECRETA
da el error:
JavaScript execution failed: Error: 18 { code: 18, ok: 0.0, errmsg: "auth fails" } at src/mongo/shell/db.js:L228
yo tengo auth = true
en etc/mongod.conf
.
¿Qué me estoy perdiendo?
db.changeUserPassword("admin", "password")
para cambiar la contraseña de cada base de datos.Respuestas:
La autenticación se gestiona a nivel de base de datos. Cuando intenta conectarse al sistema utilizando una base de datos, mongo realmente verifica las credenciales que proporciona en la colección
<database>.system.users
. Entonces, básicamente, cuando intenta conectarse a "prueba", busca las credencialestest.system.users
y devuelve un error porque no puede encontrarlas (ya que están almacenadasadmin.system.users
). Tener derecho a leer y escribir desde todas las bases de datos no significa que pueda conectarse directamente a ellas.Primero debe conectarse a la base de datos que contiene las credenciales. Tratar:
Para obtener más información, consulte este http://docs.mongodb.org/manual/reference/privilege-documents/
fuente
También recibí este error, lo que necesitaba era especificar la base de datos donde se almacenaban los datos de autenticación del usuario:
Actualización 18 de noviembre de 2017:
es una mejor solución. Mongo le pedirá su contraseña, de esta manera no pondrá su contraseña en texto sin cifrar en el historial de shell, que es una práctica de seguridad terrible.
fuente
Es posible que deba actualizar su caparazón mongo. Tenía la versión 2.4.9 del shell mongo localmente y recibí este error al intentar conectarme a una base de datos mongo 3. Actualizar la versión de shell a 3 resolvió el problema.
fuente
Sé que esto puede parecer obvio, pero también tuve que usar una sola comilla alrededor de u / ny p / w antes de que funcionara
fuente
mongo -u <myuser> -p <mypasswd
no estaba funcionando. ¿Por qué hace laadmin
diferencia aquí?En MongoDB 3.0, ahora admite múltiples mecanismos de autenticación.
Si comenzó con una nueva base de datos 3.0 con nuevos usuarios creados, se habrían creado utilizando SCRAM-SHA-1.
Por tanto, necesitará un controlador capaz de realizar esa autenticación:
http://docs.mongodb.org/manual/release-notes/3.0-scram/#considerations-scram-sha-1-drivers
Si tuviera una base de datos actualizada de 2.x con datos de usuario existentes, todavía estarían usando MONGODB-CR, y la base de datos de autenticación de usuarios tendría que actualizarse:
http://docs.mongodb.org/manual/release-notes/3.0-scram/#upgrade-mongodb-cr-to-scram
Ahora, se requiere conectarse a MongoDB 3.0 con usuarios creados con SCRAM-SHA-1 para especificar la base de datos de autenticación (a través del cliente de línea de comandos mongo) y usar otros mecanismos si se usa un controlador.
$> mongo -u USUARIO -p PASSWORD --authenticationDatabase admin
En este caso, la base de datos "admin", que también es la predeterminada, se utilizará para autenticarse.
fuente
Se aparece el problema es que un usuario creado mediante el método descrito en los documentos mongo no tiene permiso para conectarse a la base de datos por defecto (de prueba), aunque el usuario fue creado con la "userAdminAnyDatabase" y "papeles dbAdminAnyDatabase".
fuente
Vaya a terminal shell y escriba
mongo
.Luego escribe
use db_name
.Luego escriba:
Intenta también:
db.getUsers()
fuente
mongo 'mongodb://localhost:27017/admin' -u admin -p
2. Luego cambie a la base de datos de destino:> use targetDb
3. Luego agregue el usuario> db.createUser(...)
Otra posibilidad: cuando creó el usuario, es posible que haya estado
use
ingresando accidentalmente en una base de datosadmin
diferente a la que deseaba. Debe establecer--authenticationDatabase
la base de datos con la que se creó el usuario.mongodb
parece colocarte en latest
base de datos de forma predeterminada cuando abres el shell, por lo que deberías escribir en--authenticationDatabase test
lugar de hacerlo--authenticationDatabase admin
si accidentalmente estuvierasuse
ingtest
cuando ejecutarasdb.createUser(...)
.Suponiendo que tenga acceso a la máquina que está ejecutando la instancia de mongodb, podría deshabilitar la autorización de entrada
/etc/mongod.conf
(comentarauthorization
que está anidado bajo seguridad), y luego reiniciar su servidor, y luego ejecutar:Y puede obtener algo como esto:
Observe que el
db
valor es igualtest
. Eso es porque cuando creé el usuario, primero no ejecutéuse admin
ouse desiredDatabaseName
. Entonces puede eliminar el usuario condb.dropUser("myusername")
y luego crear otro usuario en la base de datos deseada así:Con suerte, eso ayudará a alguien que estaba en mi posición como novato con estas cosas.
fuente
A diferencia de MYSQl y la mayoría de RDBMS, MongoDB tiene una configuración diferente.
No viene con el usuario de autenticación básico incorporado ya configurado. Necesita configurarlo manualmente. Debe ir a Mongo.conf y habilitar la Autorización. Habilítelo con precaución. Si no lo hace, se producirá un error al iniciar su instancia de mongo. Luego verifica si su servidor mongo se inició o no.
El siguiente paso es habilitar la autorización en Mongo como usuario: -
Necesitamos crear un usuario que tenga acceso de root y cambiar la configuración de autenticación de mongo.
Cambiar a Admin DB: -
Crear usuario con privilegios de root: -
Cambie su mongo.conf para habilitar la autorización: -
Consulte esta guía paso a paso para configurar la autenticación en MongoDB.
fuente
Este es un caso específico, pero en caso de que alguien llegue con mi problema:
En MongoHQ, le mostrará un campo llamado "contraseña", pero en realidad es solo el hash de la contraseña. Tendrá que agregar un nuevo usuario y almacenar la contraseña en otro lugar (porque MongoHQ no se la mostrará).
fuente
La forma correcta de iniciar sesión en mongo shell es
mongo localhost: 27017 -u 'uuuuu' -p '> xxxxxx' --authenticationDatabase dbname
fuente
También puedes probar esto :-
Lo encontré en esta publicación
Aquí, obviamente, el localhost puede ser otro host y el / admin puede ser alguna otra base de datos en la que se haya aplicado la autenticación
fuente
Verifique la versión mongo del cliente desde donde nos estamos conectando al servidor mongo.
En mi caso, el servidor mongo era de la versión Mongo4.0.0 pero mi cliente era de la versión 2.4.9. Actualice la versión de mongo para actualizar mongo cli.
fuente