tutorial - mongodb ventajas y desventajas
No se puede autenticar en mongo, "auth falla" (10)
Esto solucionó mi problema:
Ve al terminal shell y escribe mongo
.
Luego escriba use db_name
.
Luego escribe:
db.createUser(
{
user: "mongodb",
pwd: "dogmeatsubparflavour1337",
roles: [ { role: "dbOwner", db: "db_name" } ]
}
)
Pruebe también: db.getUsers()
Muestra rápida:
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);
});
Creé un usuario administrador para mongo usando estas instrucciones:
http://docs.mongodb.org/manual/tutorial/add-user-administrator/
Desde el cliente de mongo parece que puedo autenticar:
> use admin
switched to db admin
> db.auth(''admin'',''SECRETPASSWORD'');
1
>
Pero no puedo conectar de otra manera. Por ejemplo:
mongo -u admin -p SECRETPASSWORD
da el error:
Error en la ejecución de JavaScript: Error: 18 {código: 18, ok: 0.0, errmsg: "auth failed"} en src / mongo / shell / db.js: L228
Tengo auth = verdadero en etc / mongod.conf.
¿Qué me estoy perdiendo?
En MongoDB 3.0, ahora es compatible con múltiples mecanismos de autenticación.
- Desafío y respuesta MongoDB (SCRAM-SHA-1) - predeterminado en 3.0
- Desafío y respuesta de MongoDB (MONGODB-CR) - predeterminado anterior (<3.0)
Si comenzó con una nueva base de datos 3.0 con nuevos usuarios creados, se habrían creado usando SCRAM-SHA-1.
Por lo tanto, necesitará un controlador capaz de 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 desde 2.x con datos de usuario existentes, aún estaría utilizando MONGODB-CR, y la base de datos de autenticación de usuario debería actualizarse:
http://docs.mongodb.org/manual/release-notes/3.0-scram/#upgrade-mongodb-cr-to-scram
Ahora, para conectarse a MongoDB 3.0 los usuarios creados con SCRAM-SHA-1 deben especificar la base de datos de autenticación (a través del cliente mongo de la línea de comandos) y usar otros mecanismos si usan un controlador.
$> mongo -u USER -p PASSWORD --authenticationDatabase admin
En este caso, la base de datos "admin", que también es la predeterminada, se usará para autenticarse.
Es posible que deba actualizar su mongo shell. Tenía la versión 2.4.9 del shell mongo localmente, y recibí este error al intentar conectarme a una base de datos de mongo 3. La actualización de la versión de shell a 3 resolvió el problema.
Este es un tipo de caso específico, pero en caso de que alguien llegue aquí 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 lo mostrará).
La autenticación se gestiona a nivel de base de datos. Cuando intenta conectarse al sistema utilizando una base de datos, mongo realmente busca las credenciales que proporciona en la colección <database>.system.users
. Entonces, básicamente, cuando intenta conectarse a "prueba", busca las credenciales en test.system.users
y devuelve un error porque no puede encontrarlas (ya que están almacenadas en admin.system.users
). Tener el derecho de leer y escribir desde todos los DB no significa que pueda conectarse directamente con ellos.
Primero debe conectarse a la base de datos que contiene las credenciales. Tratar:
mongo admin -u admin -p SECRETPASSWORD
Para obtener más información, consulte este http://docs.mongodb.org/manual/reference/privilege-documents/
La forma correcta de iniciar sesión en mongo shell es
mongo localhost: 27017 -u ''uuuuu -p''> xxxxxx ''--authenticationDatabase dbname
Sé que esto puede parecer obvio, pero también tuve que usar una sola cita entre el u / ny el p / w antes de que funcionara
mongo admin -u ''usuario'' -p ''contraseña''
También puedes probar esto :-
mongo localhost:27017/admin -u admin -p SECRETPASSWORD
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 autenticación
También recibí este error, lo que necesitaba era especificar la base de datos donde se almacenaban los datos de autenticación del usuario:
mongo -u admin -p SECRETPASSWORD --authenticationDatabase admin
Actualización el 18 de noviembre de 2017:
mongo admin -u admin -p
es una mejor solución. Mongo le pedirá su contraseña, de esta manera no va a poner su contraseña clara en el historial de shell, que es simplemente una práctica de seguridad terrible.
Parece que el problema es que un usuario creado a través del método descrito en los documentos de mongo no tiene permiso para conectarse a la base de datos predeterminada (prueba), incluso si ese usuario se creó con las funciones "userAdminAnyDatabase" y "dbAdminAnyDatabase".