¿Cómo especificar la base de datos de autenticación y la base de datos de destino por separado en la conexión mongodb uri?

13

Estoy usando este URI de conexión para conectarse a mongodb: mongodb://user:password@localhost/admin. Se utilizará admincomo autenticación de bot y base de datos de destino. ¿Cómo puedo hacer que la uri se use admincomo autenticación pero me permita conectarme a una base de datos diferente? Vea el siguiente comando como ejemplo:

mongo --host localhost -u user -p password --authentication admin test

el comando anterior se usará admincomo la base de datos de autenticación pero se conectará a la testbase de datos. ¿Cómo puedo hacer lo mismo en uri?

Zhao Yi
fuente

Respuestas:

26

Sí .. fácilmente!

mongo "mongodb://test:testpwd@localhost/test?authSource=admin"
MongoDB shell version v3.4.6
connecting to: mongodb://test:testpwd@localhost/test?authSource=admin
MongoDB server version: 3.4.6
MongoDB> db
test
MongoDB> 

Coloca su DB de destino al final de la cadena "base" y agrega la autenticación db al parámetro authSource

JJussi
fuente
Sí, esto es exactamente lo que estoy buscando. Gracias
Zhao Yi
4

Árbitro:

https://docs.mongodb.com/manual/reference/connection-string/#connections-connection-options

Deberá usar el siguiente formato y no necesita usar la base de datos de administración.

mongodb: // usuario: contraseña @ localhost / test? authSource = admin

/ database Opcional. El nombre de la base de datos para autenticar si la cadena de conexión incluye credenciales de autenticación en forma de nombre de usuario: contraseña @. Si no se especifica / database y la cadena de conexión incluye credenciales, el controlador se autenticará en la base de datos de administración.

Asegúrese de tener un usuario en la testbase de datos. Ver la sección 6 de este documento.

Habilitar autenticación

Cree usuarios adicionales según sea necesario para su implementación.

La base de datos donde crea el usuario (en este ejemplo, prueba) es la base de datos de autenticación de ese usuario. Aunque el usuario se autenticaría en esta base de datos, el usuario puede tener roles en otras bases de datos; es decir, la base de datos de autenticación del usuario no limita los privilegios del usuario.

use test
db.createUser(
  {
    user: "myTester",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "test" },
             { role: "read", db: "reporting" } ]
  }
)
SqlWorldWide
fuente
He intentado este uri pero no funciona. Porque intenta usarlo testcomo la base de datos de autenticación que no es correcta. Necesito usar admincomo base de datos de autenticación y conectarme a la testbase de datos.
Zhao Yi
Respuesta modificada
SqlWorldWide
Gracias por su respuesta. Pero no quiero cambiar el rol del usuario en la instancia de la base de datos. ¿Hay alguna solución para no hacer ningún cambio en la instancia?
Zhao Yi
Así es como está diseñado por MongoDB.
SqlWorldWide
¿Esto significa que no puedo lograr esto por mongo uri?
Zhao Yi