altere a senha do admin do mongo em um árbitro

1

Eu tenho uma replicaSet mongoDB que tem 3 DBs - PRIMARY / SECONDARY + Arbiter. Todos os 3 foram instalados da mesma maneira - o que significa que eles têm um banco de dados administrativo com uma senha padrão.

Agora - eu quero mudar as senhas padrão. No primário / secundário funcionou bem.

mongo admin -u admin -p <password> --authenticationDatabase=admin
db.changeUserPassword("admin",<new password>)

No entanto - no árbitro não está funcionando (mesmo depois de adicionar rs.slaveOK() no PRIMARY)

Estou recebendo:

2016-12-01T00:18:51.408-0800 E QUERY    [thread1] Error: Updating user failed: not master :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.updateUser@src/mongo/shell/db.js:1319:15
DB.prototype.changeUserPassword@src/mongo/shell/db.js:1323:9
@(shell):1:1

Alguma idéia de como alterar a senha de administrador do árbitro?

    
por Boaz 01.12.2016 / 10:30

1 resposta

2

Como você entra em um árbitro?

Como no MongoDB 3.4, os árbitros em um conjunto de réplicas não replicam nenhum dado (incluindo detalhes do usuário / função). A implicação disso é que você normalmente pode fazer login em um árbitro por meio da exceção localhost a menos que isso tenha sido especificamente desativado, configure enableLocalhostAuthBypass para false .

Há uma solicitação de recurso relevante que você pode aumentar / assistir: SERVIDOR-5479: o árbitro no conjunto de réplicas autenticadas deve permitir e exigir login / auth para operações somente de administrador .

E se o árbitro tivesse dados de usuários antes de serem adicionados ao conjunto de réplicas?

No seu caso específico, parece que o seu árbitro já tinha alguns dados de autenticação antes que o mongod fosse configurado como um membro do conjunto de réplicas. Esta não é uma implantação esperada (ou suportada), portanto, para remover ou atualizar os dados de autenticação, você precisa iniciar o árbitro como um servidor autônomo.

Para remover qualquer informação do usuário:

  1. Pare o árbitro.
  2. Inicie o árbitro em uma porta diferente sem as opções --replSet , --keyfile ou --auth para garantir que outros membros do conjunto de réplicas não possam se conectar ao árbitro enquanto você estiver fazendo alterações no modo independente.

    Por exemplo: mongod --dbpath /path/to/data --port 28000 --fork

  3. A autenticação deve estar desativada agora. Use o shell mongo para descartar o banco de dados admin :

    mongo localhost:28000/admin --eval 'db.dropDatabase()'
    
  4. Desligue o árbitro, por exemplo:

    mongo localhost:28000/admin --eval 'db.shutdownServer()'
    
  5. Inicie o árbitro com sua configuração normal.

Você também pode alterar a senha (em vez de remover o banco de dados admin ), mas isso pode ser confuso, pois não é esperado que os árbitros tenham dados do usuário. O resultado da autenticação contra um árbitro é indefinido, e é improvável que a implementação futura do SERVER-5479 suporte dados pré-existentes em árbitros. Uma vez que as informações do usuário / função são replicadas para os árbitros, espera-se que os dados sejam consistentes.

    
por 04.12.2016 / 09:25