MongoDB Academy · Aula

Mecanismos de autenticação: SCRAM e x.509

Os alunos habilitarão a autenticação SCRAM-SHA-256, criarão usuários do banco de dados e configurarão a autenticação baseada em certificados x.509 para a autenticação interna do cluster.

Aula 1 de 413 etapas

Mecanismos de autenticação: SCRAM e x.509 é uma aula grátis de MongoDB Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de MongoDB Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de MongoDB Academy inclui 4 aulas no total.

Por que a autenticação é fundamental

Por padrão, uma instância do MongoDB recém-instalada escuta em 0.0.0.0:27017 sem exigir autenticação. Inúmeras violações de segurança no mundo real ocorreram porque desenvolvedores deixaram o MongoDB exposto à internet sem ativar a autenticação. As implantações de produção devem sempre habilitar a autenticação, para que somente usuários e serviços com credenciais possam se conectar. O MongoDB oferece vários mecanismos de autenticação — os dois mais importantes são SCRAM e certificados x.509.

Habilitação da autenticação no mongod

A autenticação é ativada adicionando security.authorization: enabled ao arquivo de configuração mongod.conf (ou passando --auth na linha de comando). Depois de ativada, toda tentativa de conexão deve fornecer credenciais válidas. Antes de ativar a autenticação em uma implantação existente, crie sempre um usuário administrador primeiro — caso contrário, você ficará sem acesso.

# mongod.conf snippet
security:
  authorization: enabled

# Or start mongod with --auth flag
# mongod --auth --dbpath /data/db

Criando o primeiro usuário administrador

Conecte-se ao MongoDB sem autenticação enquanto ele ainda estiver no modo não autenticado (ou no modo de exceção do localhost) para criar o primeiro usuário. Conceda a ele a função userAdminAnyDatabase para que possa criar usuários adicionais. Em seguida, ative --auth e reconecte-se usando credenciais. A exceção do localhost permite uma conexão não autenticada pelo localhost somente até que o primeiro usuário seja criado.

// Connect without auth, create admin user first
use admin
db.createUser({
  user: 'adminUser',
  pwd: 'StrongPassword123!',
  roles: [
    { role: 'userAdminAnyDatabase', db: 'admin' },
    { role: 'readWriteAnyDatabase', db: 'admin' }
  ]
})

// Reconnect with auth
// mongosh 'mongodb://adminUser:StrongPassword123!@localhost:27017'

SCRAM: o mecanismo de autenticação padrão

SCRAM (Salted Challenge Response Authentication Mechanism) é o protocolo de autenticação padrão do MongoDB baseado em senha. Por padrão, o MongoDB usa SCRAM-SHA-256 (a variante mais recente e mais robusta). O SCRAM evita enviar a senha real pela rede — o cliente e o servidor realizam uma negociação criptográfica usando hashes com salt. Os clientes negociam automaticamente a variante SCRAM mais robusta compatível com o servidor.

// Explicitly connect with SCRAM in Node.js
const { MongoClient } = require('mongodb')

const client = new MongoClient(
  'mongodb://myUser:myPassword@localhost:27017/mydb?authSource=admin',
  { authMechanism: 'SCRAM-SHA-256' }  // default, usually omitted
)

await client.connect()

Criando usuários de aplicação com privilégio mínimo

Cada serviço de aplicação deve ter seu próprio usuário do MongoDB, com apenas as permissões necessárias. Um serviço de relatórios somente leitura deve ter apenas a função read no banco de dados específico. Uma API com muitas operações de escrita deve ter apenas readWrite. Conceder root ou dbOwner a contas de aplicação viola o princípio do privilégio mínimo e amplia o impacto de uma invasão.

// Read-only reporting user
use myApp
db.createUser({
  user: 'reportingSvc',
  pwd: 'SecurePass!456',
  roles: [{ role: 'read', db: 'myApp' }]
})

// API service user with read/write access
db.createUser({
  user: 'apiSvc',
  pwd: 'AnotherPass!789',
  roles: [{ role: 'readWrite', db: 'myApp' }]
})

Autenticação baseada em certificados x.509

Certificados x.509 fornecem uma autenticação mais robusta que as senhas ao usar pares de chaves criptográficas. O cliente apresenta um certificado assinado por uma Autoridade Certificadora confiável (CA), em vez de um nome de usuário e uma senha. O MongoDB associa o Nome Distinto do Subject (DN) do certificado a um usuário do MongoDB. Esse é o mecanismo preferencial para a autenticação interna de membros do cluster (nós do conjunto de réplicas que se autenticam entre si).

Configurando x.509 em mongod.conf

Para ativar x.509, você deve configurar o TLS (o transporte subjacente) e definir security.clusterAuthMode: x509 para a autenticação entre os membros do cluster. Para a autenticação de clientes, defina net.tls.CAFile como o certificado da sua CA para que o MongoDB possa verificar os certificados dos clientes. Isso exige gerar uma CA, assinar certificados para cada membro e cliente e distribuí-los com segurança.

# mongod.conf for x.509 client + cluster auth
net:
  tls:
    mode: requireTLS
    certificateKeyFile: /etc/ssl/server.pem
    CAFile: /etc/ssl/ca.pem

security:
  authorization: enabled
  clusterAuthMode: x509

Criando um usuário associado a um certificado x.509

Ao usar a autenticação de clientes x.509, o nome de usuário do MongoDB deve corresponder exatamente ao DN do Subject do certificado do cliente. Crie o usuário no banco de dados $external (não no banco de dados regular admin ou no banco da aplicação), pois as credenciais são validadas externamente pelo certificado, e não pelo repositório interno de credenciais do MongoDB.

// Create user mapped to certificate Subject DN
use $external
db.createUser({
  user: 'CN=apiService,OU=services,O=MyCompany,L=Istanbul,C=TR',
  roles: [{ role: 'readWrite', db: 'myApp' }]
})

// Connect using certificate in Node.js
const client = new MongoClient('mongodb://localhost:27017', {
  tls: true,
  tlsCertificateKeyFile: '/etc/ssl/client.pem',
  tlsCAFile: '/etc/ssl/ca.pem',
  authMechanism: 'MONGODB-X509'
})

Comparando SCRAM e x.509

O SCRAM é mais simples de configurar — crie um usuário com nome de usuário e senha e conecte-se. Ele é adequado para a maioria dos serviços de aplicação e para o acesso de desenvolvedores. O x.509 é mais complexo (exige uma infraestrutura de PKI), mas oferece garantias mais robustas: não há senhas para alterar ou vazar, há listas de revogação de certificados (CRLs) para revogar imediatamente o acesso, e seu uso é obrigatório para a autenticação de membros de conjuntos de réplicas em ambientes de alta segurança.

Alternando senhas e atualizando usuários

O MongoDB fornece db.updateUser() para alterar a senha de um usuário existente sem excluir e recriar a conta. No Atlas, alterne as credenciais pela interface ou pela API do Atlas. Ao alternar uma senha, atualize a cadeia de conexão da aplicação antes de alterar a senha para evitar um período de interrupção da conectividade. Use variáveis de ambiente de URI da cadeia de conexão para que a alternância da senha exija apenas a atualização de uma variável de ambiente e a reinicialização da aplicação.

// Rotate password for an existing user
use admin
db.updateUser('apiSvc', {
  pwd: 'NewStrongerPassword!2024'
})

// Or use changeUserPassword shorthand
db.changeUserPassword('apiSvc', 'NewStrongerPassword!2024')

Visualizando e removendo usuários

Audite regularmente seus usuários do MongoDB. Use db.getUsers() para listar todos os usuários de um banco de dados e db.getUser('name') para obter detalhes de uma conta específica, incluindo as funções atribuídas a ela. Remova imediatamente contas obsoletas ou comprometidas com db.dropUser(). No Atlas, a seção Users do painel Database Access fornece um inventário centralizado de todos os usuários em todos os clusters.

// List all users in current database
use myApp
db.getUsers()

// Get details of a specific user
db.getUser('apiSvc')

// Remove a user
db.dropUser('oldReportingService')

Verificação rápida

Teste sua compreensão dos conceitos de MongoDB e bancos de dados NoSQL desta lição.

Resumo da lição

Nesta lição, você aprendeu que SCRAM-SHA-256 é o mecanismo de autenticação padrão do MongoDB baseado em senha e é adequado para a maioria dos casos de uso de aplicações; certificados x.509 fornecem uma autenticação criptográfica mais robusta e são preferidos para a autenticação interna de membros do cluster; e você deve sempre criar usuários com funções de privilégio mínimo — contas de aplicação nunca devem ter permissões em nível administrativo. A seguir, veremos o controle de acesso baseado em funções.

Grátis para começar

Aprenda JavaScript com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
30
Aulas
120

Perguntas Frequentes

A aula “Mecanismos de autenticação: SCRAM e x.509” é grátis?

Sim — o texto completo de “Mecanismos de autenticação: SCRAM e x.509” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de MongoDB Academy, atualize para CoddyKit PRO. O curso de MongoDB Academy inclui 4 aulas no total.

O que vou aprender em “Mecanismos de autenticação: SCRAM e x.509”?

Os alunos habilitarão a autenticação SCRAM-SHA-256, criarão usuários do banco de dados e configurarão a autenticação baseada em certificados x.509 para a autenticação interna do cluster. Você pratica MongoDB Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar MongoDB Academy?

Nenhuma experiência prévia é necessária. MongoDB Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Mecanismos de autenticação: SCRAM e x.509”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de MongoDB Academy?

Sim. Cada aula de MongoDB Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Mecanismos de autenticação: SCRAM e x.509
  2. Controle de acesso baseado em funções: funções integradas e personalizadas
  3. Criptografia em repouso e TLS em trânsito
  4. Criptografia em nível de campo no lado do cliente
← Voltar para MongoDB Academy