As compilações de índice em clusters de produção do MongoDB precisam ser tratadas com o máximo cuidado. Documentamos os problemas em detalhes em uma de nossas postagens de blog anteriores – Os perigos de construir índices no MongoDB.
Dependendo do tamanho dos seus dados, as compilações em primeiro plano e em segundo plano podem derrubar seu cluster. Então, como você evita que seus usuários acionem acidentalmente compilações de índice da CLI do MongoDB? A resposta curta é que você não pode. No entanto, o que você pode fazer é remover o privilégio “CreateIndex” da maioria de seus usuários para que eles não possam acionar acidentalmente uma compilação de índice da CLI. Deve haver muito poucos usuários em seu sistema que tenham acesso para gravar dados no banco de dados. Entre esses usuários, menos ainda deveriam ter permissão para construir índices. Para obter uma cartilha sobre como usar as funções do MongoDB, consulte a documentação – Gerenciar usuários e funções.
A melhor opção para implementar isso é criar sua própria função personalizada e remover o privilégio 'CreateIndex' para seus usuários. No entanto, não queremos construir a lista de permissões manualmente, pois isso será diferente para cada contexto e possivelmente para a versão do MongoDB. Montamos este pequeno script para usar uma das funções internas existentes e removemos o privilégio 'CreateIndex' dessa função. Neste exemplo, estamos usando a função “readWrite” incorporada e removendo o privilégio “CreateIndex” desta função:
var privs = db.getRole('readWrite',{ showPrivileges: true }); privs.privileges.forEach(function (item, index) { var index = item.actions.indexOf("createIndex"); if (index !== -1) item.actions.splice(index, 1); }); db.createRole({role:"readWriteNoIndex",privileges:privs.privileges,roles:[]});
- Salve o conteúdo do snippet de código como createRole.js.
- Execute o script usando a sintaxe abaixo:
mongo -u <user> -p <password> <host>:27017/<db name> --authenticationDatabase admin createRole.js
Depois que a função for criada, você poderá usar essa função para criar usuários daqui para frente.
|