MongoDB em AdvPL – Parte 03

Introdução

Nos posts anteriores — MongoDB em AdvPL – Parte 01MongoDB em AdvPL – Parte 02, temos mais informações de o que é o MongoDB, e alguns exemplos do Driver AdvPL em implementação no projeto ZLIB. Agora, vamos ver o passo a passo da instalação e configuração mínima de uma instância única do MongoDB em uma máquina Windows.

Download da versão desejada

Inicialmente, vamos na página de download da edição “Community” do MongoDB — https://www.mongodb.com/download-center/community —  e pegar a versão atual (4.2.1) para Windows 64 bits:

Mongo Install 1

Feito o download, execute o instalador, e vamos para a sequencia de instalação:

Mongo Install 2.png

Clique em “Next” para a próxima tela:

Mongo Install 3

Confirme o aceite dos termos de licenciamento e clique em “Next” para a próxima tela:

Mongo Install 4

Escolha a instalação “Complete” — queremos TUDO !!!

Mongo Install 5

Aqui eu mudei uma coisa: O programa de instalação sugere que as pastas de dados e log sejam criadas dentro do “C:\Program Files\” … Isso eu não acho legal, o Windows tem algumas restrições nessa pasta, e eu não acho legal ter os dados e logs dentro da pasta de programas … apenas removi o “\Program Files\” e deixei o resto dos paths sugeridos. “Next” again …

Mongo Install 6

A opção de instalar o “MongoDB Compass” já vem marcada. Deixe assim, a gente vai usar ele logo de cara. Next …

Mongo Install 7

Certo, vamos iniciar a instalação: Clique em “Install”

Mongo Install 8

A instalação é até rapidinha, mas como escolhemos também instalar o “MongoDB Compass”, pode demorar alguns minutos… Terminada a instalação, vemos a tela abaixo:

Mongo Install 9

Bem, como também pedimos para instalar o Compass, assim que a instalação terminar o aplicativo MongoDB Compass também será executado, e ele pode abrir a tela dele sobre a tela de finalização. Uma vez finalizado o instalador, o serviço do MongoD já está instalado e em execução. Vamos para o Compass:

Compass 1

A tela do Compass já abre com os valores default para conectar na instância local — que ainda não tem nenhuma autenticação. Basta criar em “Connect” para continuar.

Compass 2

A instalação do MongoDB já vem por default com 3 databases: admin, config e local.

O database  “admin” existe para guardar usuários e direitos, e para executar algumas instruções de manutenção e diagnóstico de nível administrativo do Banco de Dados. O database “config” é de uso interno do MongoDB e não deve ser usado para armazenar dados, e o “local” é usado pelo MongoDB para controle de operações de réplica de dados. O que interessa nesse momento para nós é o “admin” — Mesmo que a nossa instância seja apenas de teste ou desenvolvimento, vamos habilitar o controle de acesso de usuários no MongoDB. Mas infelizmente o MongoDB Compass não nos ajuda nessa tarefa … vamos ter que partir para o “Mongo SHELL” — Utilitário de linha de comando do MongoDB. Pode fechar o Compass 😛

Executando o MongoDB Shell

Os aplicativos do MongoDB são por padrão instalados na pasta “C:\Program Files\MongoDB\Server\4.2\bin”, e eu realmente não lembro se o instalador já acrescenta essa pasta na variável de ambiente “PATH” do Windows. Bem, de qualquer modo não precisamos dela no momento … Abra o Windows Explorer mesmo, localize a pasta “C:\Program Files\MongoDB\Server\4.2\bin”, e execute o aplicativo “mongo.exe

Mongo Shell 01

Ao executarmos o aplicativo, será mostrada uma interface de linha de comandos — chamada “Mongo Shell”, com algumas informações e avisos:

Mongo Shell 02

Logo de cara vem uma advertência informando que o controle de acesso (Access control) não está habilitado, então qualquer um que acessar o banco pode fazer o que quiser com dados e configurações. O outro aviso é um lembrete de uma oferta de serviço de monitoramento em Cloud. Como este não nos interessa no momento, podemos logo de cara digitar o comando db.disableFreeMonitoring()  e pressionar ENTER. Esta instrução não tem retorno, apenas desliga esse lembrete. Agora, vamos para o que interessa — criar um usuário “admin” para a nossa instalação do MongoDB.

Ao criar um usuário, devemos informar as regras ou direitos (roles) que este usuário pode ter. Como vamos criar um usuário administrador da instância, ele “pode tudo”. Para isso, vamos usar os comandos em negrito abaixo:

> use admin
switched to db admin
> db.createUser( { user: “admin”, pwd: passwordPrompt(), roles: [ “root” ] })
Enter password:
Successfully added user: { “user” : “admin”, “roles” : [ “root” ] }

Ao executarmos a instrução db.createUser, a senha do usuário “admin” a ser criada será perguntada na interface. Atenção, não têm confirmação, ela é perguntada apenas uma vez. Escolha uma senha bacana, pressione ENTER, e está feito. Agora que já temos um usuário com direitos de “root” no nosso MongoDB local, podemos habilitar o controle de usuários. Primeiro, vamos encerrar / sair do Mongo Shell usando o comando “exit”.

Agora, lá na pasta onde estão instalados os aplicativos / executáveis do MongoDB, abra o arquivo “mongod.cfg” para edição, pode ser com o Notepad do Windows mesmo — desde que você inicie o Notepad com “Execute como Administrador”. Mesmo que você seja o “Administrador da máquina”, o Windows pode não deixar você salvar o arquivo…

Localize a linha onde está escrito “#security:”, tire o sinal de “#”, e insira abaixo dessa linha o texto ”  authorization: enabled” — com dois espaços em branco à esquerda. Deve ficar assim:

security:
  authorization: enabled

Pronto, agora reinicie o serviço do MongoDB — Use o gerenciador de serviços do Windows para isso, ou abra um Prompt de Comando ou PowerShell com direito administrativo e execute os comandos:

net stop MongoDB
net start MongoDB

Agora, ao executar novamente o Mongo Shell, ele deve trazer uma tela bem mais “seca”:

Mongo Shell 03

De qualquer modo, agora com o controle de acesso habilitado, mesmo que o Mongo Shell esteja conectado no banco local, sem autenticação eu não condigo fazer muita coisa. Mas eu posso pedir um “help” por exemplo:

> help
        db.help()                      help on db methods
        db.mycoll.help()               help on collection methods
        sh.help()                      sharding helpers
        rs.help()                      replica set helpers
        help admin                     administrative help
        help connect                   connecting to a db help
        help keys                      key shortcuts
        help misc                      misc things to know
        help mr                        mapreduce

        show dbs                       show database names
        show collections               show collections in current database
        show users                     show users in current database
        show profile                   show most recent system.profile entries with time >= 1ms
        show logs                      show the accessible logger names
        show log [name]                prints out the last segment of log in memory, 'global' is default
        use <db_name>                  set current database
        db.foo.find()                  list objects in collection foo
        db.foo.find( { a : 1 } )       list objects in foo where a == 1
        it                             result of the last line evaluated; use to further iterate
        DBQuery.shellBatchSize = x     set default number of items to display on shell
        exit                           quit the mongo shell

Porém, sem autenticação, um comando como “show dbs” não vai mostar nenhum database, e um comando como “show users” vai retornar erro de falta de autenticação:

> show users
2019-12-01T02:09:27.828-0300 E QUERY [js] uncaught exception: Error: command usersInfo requires authentication :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.getUsers@src/mongo/shell/db.js:1638:15
shellHelper.show@src/mongo/shell/utils.js:883:9
shellHelper@src/mongo/shell/utils.js:790:15
@(shellhelp2):1:1
>

Para autentica nesta seção, basta executar os comandos abaixo:

use admin
db.auth({user:"admin",pwd: passwordPrompt()})

O terminal vai pedir a senha, você digita a mesma senha legal que você criou para o admin, e você está autenticado. Agora sim, conseguimos executar o comando “show users”:

Mongo Shell 04

Conclusão

Beleza, o MongoDB está instalado, aceita apenas conexões locais, e já tem um usuário “admin” que pode tudo. No próximo post vamos criar um database para testes com o AdvPL, e um usuário para conexão com este database, com menos direitos de acesso.

Agradeço novamente a audiência e lhes desejo TERABYTES DE SUCESSO 😀 

Referências

 

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s