Criei um usuário administrador para mongo usando estas instruções:
http://docs.mongodb.org/manual/tutorial/add-user-administrator/
No cliente mongo, parece que posso autenticar:
> use admin
switched to db admin
> db.auth('admin','SECRETPASSWORD');
1
>
Mas não consigo conectar de outra maneira. Por exemplo:
mongo -u admin -p SECRETPASSWORD
dá o erro:
JavaScript execution failed: Error: 18 { code: 18, ok: 0.0, errmsg: "auth fails" } at src/mongo/shell/db.js:L228
Eu tenho auth = true
em etc/mongod.conf
.
o que estou perdendo?
db.changeUserPassword("admin", "password")
para alterar a senha de cada banco de dados.Respostas:
A autenticação é gerenciada no nível do banco de dados. Quando você tenta se conectar ao sistema usando um banco de dados, o mongo verifica as credenciais que você forneceu na coleção
<database>.system.users
. Então, basicamente quando você está tentando se conectar ao "teste", ele procura as credenciais emtest.system.users
e retorna um erro porque não consegue localizá-las (porque elas estão armazenadas emadmin.system.users
). Ter o direito de ler e escrever em todos os bancos de dados não significa que você pode se conectar diretamente a eles.Você deve primeiro se conectar ao banco de dados que contém as credenciais. Experimentar:
Para obter mais informações, consulte http://docs.mongodb.org/manual/reference/privilege-documents/
fonte
Também recebi este erro, o que eu precisava era especificar o banco de dados onde os dados de autenticação do usuário estavam armazenados:
Atualização em 18 de novembro de 2017:
é a melhor solução. O Mongo solicitará sua senha, dessa forma você não colocará sua senha em texto não criptografado no histórico do shell, o que é uma prática de segurança terrível.
fonte
Você pode precisar atualizar seu shell mongo. Eu tinha a versão 2.4.9 do shell mongo localmente e recebi este erro ao tentar me conectar a um banco de dados mongo 3. Atualizar a versão do shell para 3 resolveu o problema.
fonte
Sei que pode parecer óbvio, mas também tive que usar uma aspa simples entre u / n e p / w antes de funcionar
fonte
mongo -u <myuser> -p <mypasswd
não estava funcionando. Por queadmin
faz a diferença aqui?No MongoDB 3.0, agora ele oferece suporte a vários mecanismos de autenticação.
Se você começou com um novo banco de dados 3.0 com novos usuários criados, eles teriam sido criados usando SCRAM-SHA-1.
Portanto, você precisará de um driver capaz dessa autenticação:
http://docs.mongodb.org/manual/release-notes/3.0-scram/#considerations-scram-sha-1-drivers
Se você tivesse um banco de dados atualizado do 2.x com dados de usuário existentes, eles ainda estariam usando o MONGODB-CR e o banco de dados de autenticação do usuário teria que ser atualizado:
http://docs.mongodb.org/manual/release-notes/3.0-scram/#upgrade-mongodb-cr-to-scram
Agora, conectar-se ao MongoDB 3.0 com usuários criados com SCRAM-SHA-1 é necessário para especificar o banco de dados de autenticação (via cliente mongo de linha de comando) e usar outros mecanismos se estiver usando um driver.
$> mongo -u USUÁRIO -p SENHA --authenticationDatabase admin
Nesse caso, o banco de dados "admin", que também é o padrão, será usado para a autenticação.
fonte
Ele aparece o problema é que um usuário criado através do método descrito na documentação mongo não tem permissão para se conectar ao banco de dados padrão (teste), mesmo se o usuário foi criado com o "userAdminAnyDatabase" e papéis "dbAdminAnyDatabase".
fonte
Vá para o terminal do terminal e digite
mongo
.Então digite
use db_name
.Em seguida, digite:
Tente também:
db.getUsers()
fonte
mongo 'mongodb://localhost:27017/admin' -u admin -p
2. Em seguida, mude para o banco de dados de destino:> use targetDb
3. Em seguida, adicione o usuário> db.createUser(...)
Outra possibilidade: ao criar o usuário, você pode estar acidentalmente
use
acessando um banco de dados diferenteadmin
ou diferente daquele que deseja. Você precisa definir--authenticationDatabase
o banco de dados no qual o usuário foi realmente criado.mongodb
parece colocá-lo notest
banco de dados por padrão quando você abre o shell, então você precisa escrever--authenticationDatabase test
mais do que--authenticationDatabase admin
se você acidentalmente foramuse
ingtest
quando você executoudb.createUser(...)
.Supondo que você tenha acesso à máquina que está executando a instância mongodb, y poderia desativar a autorização
/etc/mongod.conf
(comentárioauthorization
que está aninhado na segurança) e, em seguida, reiniciar o servidor e executar:E você pode obter algo assim:
Observe que o
db
valor é igualtest
. Isso porque, quando criei o usuário, não executei primeirouse admin
ouuse desiredDatabaseName
. Assim, você pode excluir o usuário comdb.dropUser("myusername")
e, em seguida, criar outro usuário no banco de dados desejado, como:Espero que ajude alguém que estava na minha posição como um novato com essas coisas.
fonte
Ao contrário do MYSQl e da maioria dos RDBMS, o MongoDB tem uma configuração diferente.
Ele não vem com o usuário de autenticação básica embutido já configurado. Você precisa configurar manualmente. Você precisa ir para Mongo.conf e habilitar a Autorização. Habilite-o com cuidado, caso contrário, ocorrerá um erro ao iniciar sua instância do mongo. Você então verifica se o seu servidor mongo foi iniciado ou não.
A próxima etapa é ativar a autorização no Mongo como usuário: -
Precisamos criar um usuário que tenha acesso root e alterar a configuração de autenticação do mongo.
Mudar para Admin DB: -
Criar usuário com privilégio de raiz: -
Altere seu mongo.conf para ativar a autorização: -
Siga este guia passo a passo para configurar a autenticação no MongoDB.
fonte
É um caso meio específico, mas caso alguém chegue aqui com o meu problema:
No MongoHQ, ele mostrará um campo chamado "senha", mas na verdade é apenas o hash da senha. Você terá que adicionar um novo usuário e armazenar a senha em outro lugar (porque o MongoHQ não a mostrará para você).
fonte
A maneira correta de fazer o login no shell mongo é
mongo localhost: 27017 -u 'uuuuu' -p '> xxxxxx' --authenticationDatabase dbname
fonte
Você também pode tentar isso: -
Encontrei nesta postagem
Aqui obviamente o localhost pode ser algum outro host e o / admin pode ser algum outro banco de dados no qual a autenticação foi aplicada
fonte
Verifique a versão mongo do cliente de onde estamos conectando ao servidor mongo.
No meu caso, o servidor mongo era da versão Mongo4.0.0, mas meu cliente era da versão 2.4.9. Atualize a versão do mongo para atualizar o mongo cli.
fonte