¿Cómo creo un nuevo MongoDB desde la línea de comando con la autenticación activada?

Con el propósito de querer crear una base de datos MongoDB en una tarea de Capistrano, necesito descubrir cómo crear una nueva base de datos a través del shell de MongoDB cuando MongoDB se ejecuta con la autenticación activada.

Con la autenticación activada, el shell MongoDB no puede hacer nada sin autenticarse primero, pero la autenticación tiene que ocurrir mientras se usa el Admin base de datos hasta donde yo sé. Así que me he estado conectando para empezar como:

sudo -u mongodb mongo admin --eval "db.auth(username, password)"

Y eso me autentica para futuras acciones, pero... en ese momento necesito crear la base de datos y un usuario para ella en la misma sesión de shell. Sin embargo, no puedo:

sudo -u mongodb mongo admin --eval "db.auth(username, password);use new_database"

Porque use database no se puede utilizar en eval. Así que he intentado en su lugar:

sudo -u mongodb mongo admin --eval "db.auth(username, password);db = connect('localhost:27017/new_database')"

Y eso realmente me dará una instancia de la nueva base de datos que quiero crear, pero si intento:

sudo -u mongodb mongo admin --eval "db.auth(username, password);connect('localhost:27017/new_database').addUser(new_user, new_password)"

Recibo un error de autenticación, por lo que aparentemente uso el connect() el comando olvida que me he autenticado antes.

Entonces aquí es donde estoy atascado, tratando de crear una base de datos en una línea con MongoDB usando autenticación y un usuario administrador.

¿Alguna sugerencia sobre cómo puedo hacer esto?

preguntado el 01 de julio de 12 a las 04:07

2 Respuestas

Puedes usar db.getSiblingDB(nombre) para hacer referencia a la nueva base de datos y agregar una nueva cuenta, por ejemplo:

mongo -u username -p password admin --eval "db.getSiblingDB('new_database').addUser('new_user', 'new_password');"

Ahora debería poder autenticarse desde la línea de comando usando -u y -p:

mongo -u new_user -p new_password new_database

Respondido 15 Abr '14, 07:04

@kschaper: Gracias, corregí el enlace de documentos (del antiguo enlace wiki). - Stennie

Cuidado con el hecho de que addUser La función quedó en desuso desde la versión 2.6.

Utiliza la db.createUser() y db.updateUser() en lugar de db.addUser() para agregar usuarios a MongoDB.

Su código debe ser como el siguiente:

mongo -u username -p password admin --eval "db.getSiblingDB('new_database').createUser({ user : 'new_user', pwd :  'new_password', roles : [{ role: 'readWrite', db: 'new_database'}]});"

Respondido el 20 de junio de 19 a las 06:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.