Como entrar no Mongo como superusuário ou redefinir usuários?

29

Eu estava brincando com permissões e me tranquei fora do banco de dados Mongo. Tenho certeza de que fiz isso tentando adicionar explicitamente o acesso a um banco de dados, mas substitui apenas a permissão do banco de dados. Portanto, estou efetivamente bloqueado do meu banco de dados Mongo e tudo o que leio me diz como criar um superusuário se eu tiver o privilégio de adicionar usuário. No momento, acho que não tenho usuários com esse privilégio. Existe uma maneira de entrar no banco de dados como todo acesso? Eu possuo o servidor e tenho acesso root.

Tony
fonte

Respostas:

38

Se você se trancou, precisará fazer o seguinte:

  1. Pare sua instância do MongoDB
  2. Remova as opções --auth e / ou --keyfile da sua configuração do MongoDB para desativar a autenticação
  3. Iniciar a instância sem autenticação
  4. Edite os usuários conforme necessário
  5. Reinicie a instância com a autenticação ativada
daveh
fonte
Remover a autenticação não foi suficiente, obrigado!
Andrei
14

Eu tive um problema semelhante ao criar um usuário sem adicionar um superusuário primeiro. Os seguintes passos ajudaram a resolver o problema:

  1. Abra o arquivo de configuração do MongoDB usando sudo( sudo vi mongodb.conf).
    O arquivo pode ser encontrado na /etc/pasta
  2. Comentário "auth = true".
  3. Pare o serviço MongoDB ( sudo service mongod stop)
  4. Inicie o serviço MongoDB ( sudo service mongod start)
  5. Em seguida, crie um superusuário "root" usando o comando abaixo:

    use admin
    
    db.createUser({user:"admin",pwd:"password",roles:[{role:"root",db:"admin"}]});

    Para referência https://docs.mongodb.com/manual/reference/built-in-roles/#superuser-roles

  6. Volte e descomente "auth=true". Pare e inicie / reinicie o serviço mongodb.

Divya Krishnan
fonte
Não posso agradecer o suficiente. Eu fiquei preso tentando descobrir isso quando carreguei o projeto no servidor de desenvolvimento. Muito obrigado! :)
Woppi
Idem. Mensagens de erro do servidor espetacularmente inúteis nisso. Obrigado!
Tom
7

Se você usar um conjunto de réplicas com umkeyfile

Segurança entre membros do conjunto de réplicas usando Autenticação Interna

O arquivo de chave é usado para autenticação na replicação.

security:
  keyFile: <path-to-keyfile>
replication:
  replSetName: <replicaSetName>

Você pode usar este comando para efetuar login como administrador no mongod:

mongo -u __system -p "$(tr -d '\011-\015\040' < path-to-keyfile)" --authenticationDatabase local

Posfácio, você pode criar ou modificar seu usuário administrador.

Função interna

__systemO MongoDB atribui essa função aos objetos de usuário que representam membros do cluster, como membros do conjunto de réplicas e instâncias do mongos. A função autoriza seu titular a executar qualquer ação contra qualquer objeto no banco de dados.

Não atribua essa função a objetos de usuário que representam aplicativos ou administradores humanos, exceto em circunstâncias excepcionais.

Ivanov
fonte
Onde você encontrou esta informação?
octohedron 24/03
2

Verifique as respostas para esta pergunta, elas podem ajudar

https://stackoverflow.com/questions/20117104/mongodb-root-user

Basicamente, se você ainda tiver acesso ao servidor, poderá acessar o Adminbanco de dados.

Há mais nesta página http://docs.mongodb.org/v2.4/reference/user-privileges/

Observe que a versão 2.6 muda como isso funciona completamente. Para o 2.6, você precisará gastar mais tempo com http://docs.mongodb.org/manual/security/

Meligy
fonte
1
Como mencionado no post, essa é a única informação que consegui encontrar. Eu não tenho permissão para fazer isso #
Tony
0

Você precisa parar o Mongo, remover os arquivos de administrador e iniciar o Mongo

sudo service mongod stop
mv /data/admin.* .
sudo service mongod start
Tony
fonte
2
Isso está destruindo o banco de dados de usuários administrativos e permitindo o acesso via "localHostExcetption". Não é uma boa maneira de administrar usuários quando você tiver um problema.
Daveh 16/04