O superadministrador do MongoDB autentica bem, mas ainda recebe erros de consulta não autorizados?

4

Eu comecei a usar o MongoDB com autenticação. De acordo com a documentação, usei a exceção localhost para criar um usuário administrador com a função única de userAdminAnyDatabase . Tudo correu bem. Quando executo o cliente "mongo" e o autorizo no banco de dados admin depois usando esse banco de dados, recebo o número 1 indicando que a autorização foi bem-sucedida. No entanto, qualquer comando que eu tente executar resulta em um erro "não autorizado", mesmo tentando mostrar as coleções no banco de dados de administração que acabei de autorizar.

Alguém pode me dizer por que isso é e como posso corrigi-lo? Atualmente estou executando sem autenticação até conseguir consertar isso.

    
por Robert Oschler 25.08.2013 / 03:01

2 respostas

4

A função userAdminAnyDatabase (e a função userAdmin da qual ela é uma extensão) concede ao usuário permissão para ler e gravar na coleção system.users para administrar os usuários de um banco de dados. Ele não permite que o usuário leia ou grave nas coleções reais do banco de dados. Para isso, você precisa conceder as funções read ou readWrite .

Veja Funções de privilégio do usuário no MongoDB e Adicione um usuário a um banco de dados .

    
por David Edwards 03.09.2013 / 11:21
0

Tente executar as próximas etapas para resolver o problema de autenticação:

  1. inicie o mongod sem a autenticação ativada e execute:
  2. criar banco de dados
  3. crie um usuário com função
  4. crie uma coleção fictícia com um documento
  5. pare / mate o mongod
  6. inicie o mongod com a autenticação ativada
  7. alternar para o banco de dados criado na etapa 1
  8. autenticar no banco de dados com o usuário criado na etapa 3

comandos de amostra:

  1. mongod --port 27017 --dbpath /data/db1
  2. use educationDb;
  3. db.createUser({ user : 'readonly', pwd: 'readonly', roles : ['read']})
  4. db.xyz.insert({"name":"nix.education"})
  5. pare / mate o mongod
  6. mongod --auth --port 27017 --dbpath /data/db1
  7. use educationDb;
  8. db.auth('readonly','readonly')
por nix 07.07.2017 / 10:25