Todos os usuários criados no MongoDB 3.x são criados com SCRAM-SHA1, que quebra a compatibilidade com as ferramentas que esperam o MongoDB-CR. Há uma lista de ferramentas e drivers que ainda não foram atualizados para suportar SCRAM-SHA1, como Robomongo e MongoVUE.
Em alguns casos, mesmo que a versão mais recente do driver/ORM esteja disponível, talvez você não esteja pronto para atualizar o driver devido a alguns problemas de compatibilidade.
O MongoDB suporta dois métodos de autenticação:
- MongoDB- CR (resposta ao desafio)
Mecanismo para autenticar usuários com senhas. Mecanismo de autenticação padrão até 2.6.x. Consulte a documentação para obter mais detalhes. - SCRAM-SHA1
Este é um padrão IETF para mecanismos de resposta de desafio para autenticação de usuários com senhas. Este é o sistema mais novo e mais seguro. Não é compatível com o MongoDB-CR. Consulte a documentação para obter mais detalhes.
MongoDB CR é o sistema de autenticação legado. O MongoDB 3.X mudou o sistema de autenticação de usuário padrão para SCRAM-SHA1. Assim, quaisquer novos usuários criados no sistema são usuários SCRAM-SHA1. Como o SCRAM-SHA1 não é compatível com versões anteriores, ele interrompe a autenticação com todos os usuários usando o mecanismo MONGODB-CR.
No entanto, você pode querer usar o novo mecanismo de armazenamento WiredTiger que está disponível no MongoDB 3.x. Aqui estão as etapas para configurar o MONGODB-CR como o mecanismo de autenticação padrão no MongoDB 3.x, supondo que você esteja executando um conjunto de réplicas:
- Crie um cluster MongoDB 3.x.
- Parar todos os nós do conjunto de réplicas, exceto o principal.
- Desative a autenticação no primário e reinicie o nó. Fiz isso comentando as seguintes entradas no arquivo conf do MongoDB e reiniciando o servidor:
#security: # authorization: enabled # keyFile: /var/lib/mongo/rskey #replication: # replSetName: RS-rsname-0
- Conecte-se ao primário e altere a versão do esquema:
use admin; var schema = db.system.version.findOne({"_id" : "authSchema"}); schema.currentVersion = 3; db.system.version.save(schema)
- Desfaça as alterações no arquivo mongodb.conf na etapa 3 acima e reinicie o MongoDB.
- Reinicie o MongoDB nos outros nós do conjunto de réplicas e verifique se o conjunto de réplicas está íntegro. Feito isso, todos os usuários criados no sistema serão usuários do MongoDB-CR. Você pode validar isso executando o seguinte comando:
db.system.users.find().pretty();
Observe, no entanto, que isso deve ser apenas uma solução temporária. A correção de longo prazo mais segura é atualizar seu servidor MongoDB para usar o modelo SCRAM-SHA1. Quando estiver pronto para atualizar, execute o script a seguir para atualizar a versão do esquema de seus usuários para SCRAM-SHA1:
db.getSiblingDB("admin").runCommand({authSchemaUpgrade});