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


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 eu executo o cliente "mongo" e autorizo ​​o admin banco de dados depois usando esse banco de dados eu 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 eu posso consertar isso? Atualmente estou executando sem autenticação até conseguir consertar isso.


4
2017-08-25 01:01


origem




Respostas:


o userAdminAnyDatabase papel (e os userAdmin papel que é uma extensão de) simplesmente dá ao seu usuário a permissão para ler e escrever para o system.users coleção 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 o read ou readWrite papéis.

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


4
2017-09-03 09:21





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

  1. inicie o mongod sem autenticação ativada e execute:
  2. criar banco de dados
  3. criar usuário com papel
  4. criar uma coleção fictícia com um documento
  5. pare / mate o mongod
  6. iniciar o mongod com a autenticação ativada
  7. mudar para banco de dados criado no passo 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')

0
2017-07-07 08:25