Segurança e backup no MongoDB

Índice
Ao estabelecer nosso serviço em um ambiente de produção ou talvez em um ambiente de desenvolvimento com vários usuários, a primeira coisa que devemos fazer é criar um esquema de segurança, isso nos permite prevenir nossa Bases de dados são acessados ​​por pessoas incorretamente.
A principal característica de MongoDB é que ao instalar uma instância ela roda sem ter criado nenhum tipo de medida de autenticação, é assim para facilitar o início do desenvolvimento, mas chega um ponto em que devemos proteger nossa infraestrutura.
Outro ponto importante que se refere à questão da segurança e backup de nossos dados, é quando precisamos fazer um backup de um determinado momento, mas não queremos que haja movimentação de dados, pois desta forma garantimos a integridade de nossos Banco de dados e coleções de documentos. Neste aspecto, também existe uma ferramenta dentro MongoDB isso nos permite bloqueá-lo temporariamente para garantir que o que copiamos é apropriado.
RequisitosOs requisitos de que precisamos nesta ocasião são muito simples, simplesmente devemos ter uma instância de MongoDB instalado e funcionando em nosso sistema, também precisaremos acessar o serviço por meio do console. Este tutorial foi desenvolvido em janelas, então alguns comandos podem mudar em outros sistemas operacionais, mas tudo tem a ver com o que é feito fora do console MongoDB, e a forma como expressamos as rotas.
Definir os parâmetros de autenticação do usuário não é algo vital para o funcionamento do MongoDB em produção, pois podemos instalar o serviço para que o equipamento onde está a funcionar tenha um filtro de ligação, pelo que se tentarmos aceder a esse equipamento fora da rede não teremos acesso.
Essa abordagem simplista de segurança é muito eficaz, mas apenas para projetos em que o serviço não é compartilhado com outras equipes, uma vez que, se tivermos diferentes equipes de desenvolvimento trabalhando no mesmo servidor, precisaremos de outra coisa. É aqui que o autenticação, com ele cuidamos de solicitar um usuário e senha por coleção se quisermos, assim temos a possibilidade de separar adequadamente as diferentes instâncias para cada computador.
Ambas as medidas de segurança não são exclusivas e se queremos utilizá-las simultaneamente, o que estamos fazendo é criando um serviço muito mais seguro para o nosso ambiente, seja em produção, pré-produção ou desenvolvimento multi-equipe.
O autenticação em sua forma mais básica, é conseguido com o comando createUser Isso deve ser executado quando tivermos selecionado o Base de dados admin que é onde nossos usuários devem estar.
É importante notar que desde a versão 2.6 do MongoDB é que o método começou a ser usado createUser, no passado tudo era resolvido pelo método adicionar usuárioNo entanto, a alteração foi feita para permitir maior versatilidade ao fazer alterações.
Vamos ver como podemos definir um usuário administrador e, em seguida, um usuário que só pode ler o banco de dados teste.
A estrutura do documento que recebe o método createUser É o seguinte:
 {"Usuário": "nome de usuário", "pwd": "senha", "funções": [{"função": "", "db": ""},]}
Como observamos, devemos estabelecer o nome e a senha do usuário que estamos criando, mas, além disso, devemos também criar as funções, que é uma estrutura de permissões que nos permitirá definir os poderes que atribuímos ao usuário .
No exemplo a seguir, vamos criar um usuário administrador que tenha acesso a todos os Bases de dados e que pode controlar o serviço, para isso usaremos o papéis:
  • clusterAdmin
  • readAnyDatabase
  • ler escrever

Com esses três parâmetros, já podemos ter nosso primeiro usuário para gerenciar. Vamos ver como fica no console:

Com isso já criamos nosso usuário administrador com sucesso, agora devemos lembrar o nome de usuário e senha corretamente, pois o próximo passo que faremos é habilitar a segurança, para isso devemos iniciar o serviço com o parâmetro -auth.
Ao reiniciar o serviço, podemos então colocar nosso usuário administrador recém-criado e, para testá-lo, criaremos um usuário que só pode ler o Base de dados. Vamos ver como reiniciamos o serviço nas etapas a seguir.
Simplesmente temos que pará-lo primeiro, por exemplo, em janelas nos posicionamos no console em que está sendo executado e pressionamos as teclas CTRL + C. Então começamos nosso serviço novamente normalmente, mas no final passamos o parâmetro auth, como podemos ver no seguinte console:

Assim que isso for feito, retornaremos ao console de controle do MongoDB, mas, neste caso, se vamos usar nosso usuário recém-criado:
 mongo.exe --username = root --password = 123456 admin
Com essa linha anterior podemos acessar nosso serviço com segurança, podemos ver isso na imagem a seguir:

É importante lembrar que devemos usar uma senha mais segura do que "123456" neste exemplo, ela é usada apenas para fins de demonstração, no entanto, para um ambiente de produção não é adequada.
Uma vez que verificamos como acessar com autenticação, vamos criar um usuário que só pode ler no Base de dados teste, para isso vamos repetir a criação de um usuário, mas vamos especificar a função:
 ler
Desta forma, limitaremos o usuário a não poder escrever nas coleções. Vamos ver a resposta em nosso console:

Agora, ao tentar escrever um documento, obteremos um erro:

Vimos então como já protegemos nossos usuários adequadamente, é claro que este trabalho de administração de usuários é um pouco complexo, mas uma vez feito isso podemos ter grande certeza de que não teremos acesso não autorizado ao Bases de dados que estamos protegendo.
Uma das atividades mais complexas para garantir quando fazemos um backup é que devemos garantir a integridade dos dados, isso nos leva a um dilema, localizar o momento em que menos usuários trabalham e fazer o backup, ou independentemente dos dados .
fsync e bloqueioNão deveria ser assim, claro que fazer um backup no momento em que sabemos que há o menor número de usuários é sempre recomendado, pois evitamos problemas de aplicação, garantindo que os dados sejam sempre possíveis se usarmos o que em MongoDB nós sabemos como fsync Y trancar.
Com estes dois parâmetros podemos fazer com que nosso Banco de Dados rejeite as gravações, e no momento certo podemos realizar os backups de forma adequada.
Para criar este bloqueio, devemos executar o seguinte comando em nosso banco de dados:
 db.runCommand ({"fsync": "1", "lock": "1"});
Com isso teremos nosso Base de dados efetivamente bloqueado contra escrita:

Como podemos ver, é bastante simples e eficaz, agora se quisermos quebrar o bloqueio, basta executar novamente o comando:
 db.fsyncUnlock ();
Com este último teremos mais uma vez nosso Base de dados capaz de receber escrita:

Embora o exposto acima represente maior flexibilidade e nos dê muito mais segurança contra corrupção de dados e favoreça a integridade, realmente não é uma prática que devemos seguir em ambientes reais de produção.
O ideal é criar um ambiente com replicação, onde possamos acessar uma cópia dos dados e assim podermos manipular com qualquer uma das opções que temos os backups necessários. Estar em uma réplica do Base de dados produção podemos bloqueá-lo, ou desligá-lo e fazer o backup de forma que o usuário nunca encontre um erro na aplicação porque não pode escrever um registro.
Quanto aos backups, as coisas ficam mais complicadas visto que é aconselhável utilizar réplicas de servidor, porém devido à forma como foi concebido MongoDB, este tipo de estruturas senhor de escravos São muito fáceis de implementar, portanto entender o conceito é o mais difícil, mas sua aplicação é extremamente amigável. DBA.
Com isso encerramos este tutorial, pois vemos a administração do MongoDB É bastante avançado, se tivermos uma estrutura de tamanho médio, podemos já ter pensado na questão da segurança do usuário, embora criar usuários não seja complexo, se é bom sentar e definir uma boa estrutura para criar este tipo de permitem.Gostou e ajudou este tutorial?Você pode recompensar o autor pressionando este botão para dar a ele um ponto positivo

Você vai ajudar o desenvolvimento do site, compartilhando a página com seus amigos

wave wave wave wave wave