2012-07-01 21 views
9

Para poder 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 MongoDB cuando MongoDB se ejecuta con la autenticación activada.¿Cómo creo un nuevo MongoDB desde la línea de comando con auth activado?

Con la autenticación activada, el shell MongoDB no puede hacer nada sin primero autenticarse, pero la autentificación tiene que ocurrir mientras se utiliza la base de datos admin que yo sepa. Así que he estado conectando a ella para empezar como:

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

Y eso me autentica para la acción, pero ... en ese punto que necesito para crear la base de datos, y un usuario para que en la misma sesión de shell . No puedo, sin embargo:

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

Debido use database no se pueden 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 que realmente me obtener una instancia de la nueva base de datos que quiero creado, pero si trato de:

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

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

Así que aquí es donde estoy atascado, tratando de crear una base de datos en una línea con MongoDB usando auth y un usuario administrador.

¿Alguna sugerencia sobre cómo puedo hacer esto?

Respuesta

12

Puede utilizar db.getSiblingDB(name) 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 usted debería ser capaz de autenticar desde la línea de comandos usando -u y -p:

mongo -u new_user -p new_password new_database 
+0

funciona perfecto, gracias! – rjoll

+0

http://docs.mongodb.org/manual/reference/method/db.getSiblingDB/ – kschaper

+0

@kschaper: Gracias, corrigió el enlace de documentos (del antiguo enlace de la wiki). – Stennie

0

Tenga en cuenta que la función addUser quedó obsoleta desde la versión 2.6.

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

El código debe ser como a continuación:

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