Como especificar o banco de dados de autenticação e o banco de dados de destino separadamente no uri de conexão do mongodb?

13

Eu estou usando esse URI de conexão para conectar a mongodb: mongodb://user:password@localhost/admin. Ele será usado admincomo autenticação de bot e banco de dados de destino. Como posso fazer com que a URI use admincomo autenticação, mas permita que eu me conecte a um banco de dados diferente? Por favor, veja o comando abaixo como um exemplo:

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

o comando acima será usado admincomo banco de dados de autenticação, mas se conectará ao testbanco de dados. como posso fazer a mesma coisa em uri?

Joey Yi Zhao
fonte

Respostas:

26

Sim .. facilmente!

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> 

Você coloca o banco de dados de destino no final da cadeia "base" e adiciona a autenticação db ao parâmetro authSource

JJussi
fonte
Sim, é exatamente isso que estou procurando. Obrigado
Joey Yi Zhao
4

Ref:

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

Você precisará usar o formato abaixo e não o banco de dados do administrador.

mongodb: // usuário: senha @ localhost / test? authSource = admin

/ database Opcional. O nome do banco de dados a ser autenticado se a cadeia de conexão incluir credenciais de autenticação na forma de nome de usuário: senha @. Se / database não for especificado e a cadeia de conexão incluir credenciais, o driver será autenticado no banco de dados do administrador.

Verifique se você tem um usuário no testbanco de dados. Veja a seção 6 deste documento.

Ativar autenticação

Crie usuários adicionais conforme necessário para sua implantação.

O banco de dados em que você cria o usuário (neste exemplo, teste) é o banco de dados de autenticação desse usuário. Embora o usuário se autentique neste banco de dados, ele pode ter funções em outros bancos de dados; ou seja, o banco de dados de autenticação do usuário não limita os privilégios do usuário.

use test
db.createUser(
  {
    user: "myTester",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "test" },
             { role: "read", db: "reporting" } ]
  }
)
SqlWorldWide
fonte
Eu tentei esse uri, mas ele não funciona. Porque ele tenta usar testcomo o banco de dados de autenticação que não está correto. Eu preciso usar admincomo banco de dados de autenticação e conectar ao testbanco de dados.
Joey Yi Zhao
Resposta modificada.
SqlWorldWide
Obrigado pela sua resposta. Mas não quero alterar a função do usuário na instância do banco de dados. Existe alguma solução para não fazer nenhuma alteração na instância?
Joey Yi Zhao
É assim que é projetado pelo MongoDB.
SqlWorldWide
Isso significa que não posso conseguir isso com mongo uri?
Joey Yi Zhao