Curso
Com cada vez mais pessoas online, cresce a necessidade de definir permissões e funções para garantir segurança e gerenciar o acesso a aplicativos e sistemas. O controle de acesso baseado em funções é um modelo de autorização usado para controlar o acesso a recursos com base nas funções predefinidas dos usuários.
No modelo de RBAC do MongoDB, as ações são representadas como funções que são atribuídas aos usuários certos. Em vez de conceder várias permissões individuais, você pode atribuir uma única função (por exemplo, dbAdmin), que já inclui um conjunto definido de permissões (como leitura em coleções do banco de dados). Esse modelo facilita o gerenciamento de acesso dos usuários de forma escalável.
Habilitando RBAC no MongoDB
No modelo central de RBAC, o acesso é negado por padrão, ou seja, os usuários não podem acessar recursos sem possuir uma função. Um usuário pode ter várias funções, e cada função define um conjunto específico de privilégios ou permissões para acessar determinadas capacidades.
Conceitos básicos de RBAC
Aqui estão alguns dos principais conceitos que você precisa conhecer sobre RBAC:
Usuários
No modelo RBAC, um usuário é uma entidade que recebe uma ou mais funções que determinam seu acesso a recursos e operações do banco de dados. Sem atribuição de função, o usuário não acessa o sistema. Para ter acesso, o usuário deve se autenticar e receber ao menos uma função.
Funções
O MongoDB oferece funções e privilégios nativos tanto para implantações autogerenciadas quanto para o MongoDB Atlas. Algumas funções comuns são read, readWrite e dbAdmin/atlasAdmin. As funções de administração de banco de dados têm privilégios mais altos do que as demais, incluindo o privilégio de gerenciar os privilégios de outras funções.
Se essas funções nativas não atenderem ao conjunto desejado de privilégios, o MongoDB permite criar e modificar funções definidas pelo usuário.
Uma função é um conjunto de privilégios atribuídos ao usuário.
Por exemplo, uma função "read" pode ter privilégios somente de leitura; uma função "admin" pode ter leitura e escrita; enquanto a função "owner" pode ter leitura, escrita e exclusão para um item específico (um banco de dados, um documento etc.). Uma função concede privilégios para executar ações específicas em recursos. Cada privilégio pode ser definido explicitamente na função ou herdado de outra função, ou ambos.
Funções definidas pelo usuário / funções personalizadas
O MongoDB fornece diversas funções nativas que administradores podem usar para controlar o acesso a um sistema MongoDB. Porém, se as funções existentes não descreverem os privilégios específicos que você precisa, é possível definir e atribuir novas funções aos usuários em um banco de dados — essas são as funções personalizadas. Com exceção das funções criadas no banco admin, uma função só pode incluir privilégios aplicáveis ao seu próprio banco e só pode herdar de outras funções do mesmo banco.
Para criar uma nova função, use o método db.createRole(), definindo os privilégios no array privileges e as funções herdadas no array roles.
O MongoDB usa a combinação do nome do banco e do nome da função para definir uma função de forma exclusiva, e armazena todas as informações de função na coleção admin.system.roles do banco admin.
Exemplo: este exemplo cria uma função personalizada (sales_attendant) que só pode inserir documentos na coleção sales do banco sales_db.
use sales
db.createRole(
{
role: "sales_attendant",
privileges: [
{
resource: { db: "sales_db", collection: "sales" },
actions: [ "insert" ]
}
],
roles: []
}
)
Funções nativas
Funções nativas são funções pré-criadas atribuídas aos usuários que permitem executar operações como leitura e escrita em coleções de um banco de dados. Exemplos: read, write, readWrite, dbAdmin e readAnyDatabase.
- read e readWrite (acesso no nível do banco): concedem acesso para realizar, respectivamente, operações somente de leitura ou de leitura/escrita em todas as coleções não sistêmicas dentro de um banco de dados específico.
- dbAdmin: concede direitos administrativos necessários para gerenciar um banco de dados específico, como criar, remover e modificar índices e coleções. É indicado para times de desenvolvimento ou scripts de manutenção de banco de dados.
- clusterAdmin (acesso operacional): função de alto privilégio, geralmente reservada para equipes de operações (DevOps/Ops). Concede permissões para gerenciar toda a implantação do MongoDB, incluindo criação de backups periódicos, configuração de replica sets e sharding.
Privilégios (permissões)
Privilégios são um conjunto de ações (por exemplo, find, insert) permitidas sobre uma capacidade.
Por exemplo, se a capacidade é "informar o cliente sobre seu saldo atual", então os privilégios do usuário (por exemplo, o atendente do banco) podem ser somente de leitura. Se a capacidade é aumentar o limite de transações de uma conta, os privilégios podem ser de leitura e escrita.
Privilégios herdados
Uma função pode incluir uma ou mais funções existentes (com todos os seus privilégios). Por exemplo, uma função dbAdmin pode incluir funções de leitura, escrita e atualização (que podem ser funções individuais) com seus respectivos privilégios.
Recursos
Um recurso pode ser um banco de dados, uma coleção, um conjunto de coleções ou o cluster.
Implementando o princípio do mínimo privilégio
Na segurança moderna de bancos de dados, o Princípio do Mínimo Privilégio (PoLP) é fundamental. Ele estabelece que todo usuário deve receber apenas as permissões mínimas necessárias para executar suas tarefas.
Exemplo de boa prática: em vez de usar um usuário global com readWrite, crie usuários específicos por aplicação. Por exemplo, se seu serviço de inventário interage apenas com o banco app_data, o usuário da aplicação deve ter readWrite somente nesse banco. Essa compartimentação impede que um serviço comprometido acesse indevidamente outros bancos (como billing ou users).
Exemplo de código:
Criando um usuário com mínimo privilégio. Este exemplo cria um usuário (branch_manager) com acesso de leitura e escrita restrito estritamente ao banco bank_data.
use admin
db.createUser(
{
user: "branch_manager",
pwd: passwordPrompt(),
roles: [
{ role: "readWrite", db: "bank_data" }
]
}
)
Boas práticas
- Crie e atribua funções e políticas bem definidas com antecedência.
- Siga o princípio do mínimo privilégio para reforçar a segurança.
- Use funções nativas sempre que possível; audite periodicamente as funções atribuídas para identificar anomalias.
FAQs
O que é RBAC no MongoDB?
O controle de acesso baseado em funções é um mecanismo de segurança usado para gerenciar o acesso de usuários.
Qual é a diferença entre uma função nativa e uma função personalizada?
Uma função nativa é pré-criada e atribuída aos usuários para permitir operações como leitura e escrita em coleções de um banco de dados; já uma função personalizada é definida pelo usuário para descrever os privilégios específicos que você deseja.
Por que o princípio do mínimo privilégio é importante?
É importante porque garante que os usuários recebam apenas as permissões mínimas necessárias para executar suas tarefas.
Se você quer que um gerente de loja possa apenas ler e escrever dados de um banco de dados específico, que tipo de função você atribui?
readWrite
Qual comando é usado para criar uma função personalizada?
db.createRole()
Afi atua na defesa dos desenvolvedores na MongoDB com foco em Django e Python, ajudando engenheiros a construir com tecnologias modernas de dados por meio de tutoriais, palestras e engajamento com a comunidade. Reconhecida como Microsoft MVP em Python e Web, ela integra o conselho da Django Software Foundation e é Programme Chair da DjangoCon US 2025. Afi também é Regional Executor na Black Python Devs, além de colaboradora ativa de open source e palestrante internacional.



