Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

db.createUser()

Nesta página

  • Definição
  • Comportamento
  • Acesso obrigatório
  • Exemplos
db.createUser(user, writeConcern)

Cria um novo usuário para o banco de dados no qual o método é executado. db.createUser() retorna um erro de usuário duplicado se o usuário já existir no banco de dados.

Importante

Método mongosh

Esta página documenta um método mongosh . Esta não é a documentação para comandos de banco de dados ou drivers específicos de idioma, como Node.js.

Para o comando do banco de dados, consulte o comando createUser.

Para drivers de API do MongoDB, consulte a documentação do driver MongoDB específica do idioma.

Para a documentação de shell legada do mongo, consulte a documentação para a versão correspondente do MongoDB Server:

mongo shell v4.4

O método db.createUser() tem a seguinte sintaxe:

Campo
Tipo
Descrição
user
documento
O documento com autenticação e informações de acesso sobre o usuário a ser criado.
writeConcern
documento

Opcional. O nível da write concern para a operação. Consulte Especificação de write concern.

O documento user define o usuário e tem o seguinte formulário:

Dica

A partir da versão 4.2 do shell mongo, você pode usar o método passwordPrompt() em conjunto com vários métodos/comandos de autenticação/gerenciamento de usuário para solicitar a senha em vez de especificar a senha diretamente na chamada de método/comando. No entanto, você ainda pode especificar a senha diretamente como faria com versões anteriores do shell mongo .

{
user: "<name>",
pwd: passwordPrompt(), // Or "<cleartext password>"
customData: { <any information> },
roles: [
{ role: "<role>", db: "<database>" } | "<role>",
...
],
authenticationRestrictions: [
{
clientSource: ["<IP>" | "<CIDR range>", ...],
serverAddress: ["<IP>" | "<CIDR range>", ...]
},
...
],
mechanisms: [ "<SCRAM-SHA-1|SCRAM-SHA-256>", ... ],
passwordDigestor: "<server|client>"
}

O documento user tem os seguintes campos:

Campo
Tipo
Descrição
user
string
O nome do novo usuário.
pwd
string

A senha do usuário. O campo pwd não é exigido se você executar o db.createUser() no banco de dados do $external para criar usuários que têm credenciais armazenadas externamente no MongoDB.

O valor pode ser:

  • a senha do usuário em string de texto não criptografado ou

  • passwordPrompt() para solicitar a senha do usuário.

Dica

A partir da versão 4.2 do shell mongo, você pode usar o método passwordPrompt() em conjunto com vários métodos/comandos de autenticação/gerenciamento de usuário para solicitar a senha em vez de especificar a senha diretamente na chamada de método/comando. No entanto, você ainda pode especificar a senha diretamente como faria com versões anteriores do shell mongo .

customData
documento
Opcional. Qualquer informação arbitrária. Este campo pode ser usado para armazenar quaisquer dados que um administrador deseja associar a este usuário específico. Por exemplo, este pode ser o nome completo do usuário ou ID do funcionário.
roles
variedade
As funções concedidas ao usuário. Pode especificar uma array vazia [] para criar usuários sem papéis.
variedade

Opcional. As restrições de autenticação que o servidor impõe ao usuário criado. Especifica uma lista de endereços IP e intervalos CIDR a partir dos quais o usuário tem permissão para se conectar ao servidor ou a partir dos quais o servidor pode aceitar usuários.

mechanisms
variedade

Opcional. Especifique o mecanismo ou mecanismos específicos do SCRAM para criar credenciais de usuário do SCRAM. Se authenticationMechanisms for especificado, você só poderá especificar um subconjunto do authenticationMechanisms.

Os valores válidos são:

  • "SCRAM-SHA-1"

    • Utiliza a função de hash SHA-1.

  • "SCRAM-SHA-256"

    • Utiliza a função de hash SHA-256.

    • Requer que o passwordDigestor seja server.

O padrão é SCRAM-SHA-1 e SCRAM-SHA-256.

passwordDigestor
string

Opcional. Indica se o servidor ou o cliente digere a senha.

Os valores disponíveis são:

  • "server" (Padrão)
    O servidor recebe senha não digerida do cliente e digere a senha.
  • "client" (Não compatível com SCRAM-SHA-256)
    O cliente digere a senha e passa a senha digerida para o servidor.

No campo roles, é possível especificar roles incorporadas e roles definidas pelo usuário.

Para especificar uma role que existe no mesmo banco de dados onde o db.createUser() é executado, você pode especificar a role com o nome dela:

"readWrite"

Ou você pode especificar a role com um documento, como feito a seguir:

{ role: "<role>", db: "<database>" }

Para especificar uma role existente em outro banco de dados, especifique-a com um documento.

O documento authenticationRestrictions pode conter apenas os seguintes campos. O servidor emitirá um erro se o documento authenticationRestrictions contiver um campo não reconhecido:

Nome do campo
Valor
Descrição
clientSource
Array de endereços IP e/ou faixas CIDR
Se presente, ao autenticar um usuário, o servidor verifica se o endereço IP do cliente está na lista fornecida ou se pertence a uma faixa CIDR na lista. Se o endereço IP do cliente não estiver presente, o servidor não autenticará o usuário.
serverAddress
Array de endereços IP e/ou faixas CIDR
Uma lista de endereços IP ou faixas CIDR às quais o cliente pode se conectar. Se estiver presente, o servidor verificará se a conexão do cliente foi aceita por meio de um endereço IP na lista fornecida. Se a conexão foi aceita por meio de um endereço IP não reconhecido, o servidor não autenticará o usuário.

Importante

Se um usuário herdar múltiplas roles com restrições de autenticação incompatíveis, esse usuário se tornará inutilizável.

Por exemplo, se um usuário herdar uma função na qual o campo clientSource é ["198.51.100.0"] e outra função na qual o campo clientSource é ["203.0.113.0"], o servidor não poderá autenticar o usuário.

Para obter mais informações sobre autenticação no MongoDB, consulte Autenticação.

O método db.createUser() envolve o comando createUser .

A partir da versão 4.0.9, O MongoDB atribui automaticamente um userId exclusivo ao usuário na criação.

Se executar em um conjunto de réplicas, o db.createUser() será executado usando o write concern de "majority" por padrão.

Aviso

Por padrão, db.createUser() envia todos os dados especificados para a instância do MongoDB em texto não criptografado, mesmo se estiver usando passwordPrompt(). Use a criptografia de transporte TLS para proteger as comunicações entre clientes e o servidor, incluindo a senha enviada por db.createUser(). Para obter instruções sobre como habilitar a criptografia de transporte TLS, consulte Configurar mongod e mongos para TLS/SSL.

O MongoDB não armazena a senha no cleartext. A senha só estará vulnerável em trânsito entre o cliente e o servidor e somente se a criptografia de transporte TLS não estiver habilitada.

Os usuários criados no banco de dados do $external devem ter credenciais armazenadas externamente no MongoDB, como, por exemplo, com instalações do MongoDB Enterprise que utilizam Kerberos.

Para usar Client Sessions e Causal Consistency Guarantees com usuários de autenticação $external (usuários Kerberos, LDAP ou x.509), os nomes de usuário não podem ter mais de 10k bytes.

Você não pode criar usuários no banco de dados local.

Os papéis embutidos do userAdmin e userAdminAnyDatabase fornecem ações do createUser e grantRole em seus respectivos recursos.

A operação db.createUser() a seguir cria o usuário accountAdmin01 no banco de dados products .

Dica

A partir da versão 4.2 do shell mongo, você pode usar o método passwordPrompt() em conjunto com vários métodos/comandos de autenticação/gerenciamento de usuário para solicitar a senha em vez de especificar a senha diretamente na chamada de método/comando. No entanto, você ainda pode especificar a senha diretamente como faria com versões anteriores do shell mongo .

use products
db.createUser( { user: "accountAdmin01",
pwd: passwordPrompt(), // Or "<cleartext password>"
customData: { employeeId: 12345 },
roles: [ { role: "clusterAdmin", db: "admin" },
{ role: "readAnyDatabase", db: "admin" },
"readWrite"] },
{ w: "majority" , wtimeout: 5000 } )

A operação fornece a accountAdmin01 as seguintes funções:

  • as funções clusterAdmin e readAnyDatabase no banco de dados admin

  • a função readWrite no banco de dados products

A seguinte operação cria accountUser no banco de dados products e fornece ao usuário as funções readWrite e dbAdmin.

Dica

A partir da versão 4.2 do shell mongo, você pode usar o método passwordPrompt() em conjunto com vários métodos/comandos de autenticação/gerenciamento de usuário para solicitar a senha em vez de especificar a senha diretamente na chamada de método/comando. No entanto, você ainda pode especificar a senha diretamente como faria com versões anteriores do shell mongo .

use products
db.createUser(
{
user: "accountUser",
pwd: passwordPrompt(), // Or "<cleartext password>"
roles: [ "readWrite", "dbAdmin" ]
}
)

A seguinte operação cria um usuário denominado reportsUser no banco de dados admin, mas ainda não atribui funções:

Dica

A partir da versão 4.2 do shell mongo, você pode usar o método passwordPrompt() em conjunto com vários métodos/comandos de autenticação/gerenciamento de usuário para solicitar a senha em vez de especificar a senha diretamente na chamada de método/comando. No entanto, você ainda pode especificar a senha diretamente como faria com versões anteriores do shell mongo .

use admin
db.createUser(
{
user: "reportsUser",
pwd: passwordPrompt(), // Or "<cleartext password>"
roles: [ ]
}
)

A operação a seguir cria um usuário chamado appAdmin no banco de dados admin e dá ao usuário readWrite acesso ao banco de dados config, que permite ao usuário alterar determinadas configurações para clusters fragmentados, como para a configuração do balanceador.

Dica

A partir da versão 4.2 do shell mongo, você pode usar o método passwordPrompt() em conjunto com vários métodos/comandos de autenticação/gerenciamento de usuário para solicitar a senha em vez de especificar a senha diretamente na chamada de método/comando. No entanto, você ainda pode especificar a senha diretamente como faria com versões anteriores do shell mongo .

use admin
db.createUser(
{
user: "appAdmin",
pwd: passwordPrompt(), // Or "<cleartext password>"
roles:
[
{ role: "readWrite", db: "config" },
"clusterAdmin"
]
}
)

A seguinte operação cria um usuário denominado restricted no banco de dados admin. Este usuário só pode ser autenticado se se conectar do endereço IP 192.0.2.0 ao endereço IP 198.51.100.0.

Dica

A partir da versão 4.2 do shell mongo, você pode usar o método passwordPrompt() em conjunto com vários métodos/comandos de autenticação/gerenciamento de usuário para solicitar a senha em vez de especificar a senha diretamente na chamada de método/comando. No entanto, você ainda pode especificar a senha diretamente como faria com versões anteriores do shell mongo .

use admin
db.createUser(
{
user: "restricted",
pwd: passwordPrompt(), // Or "<cleartext password>"
roles: [ { role: "readWrite", db: "reporting" } ],
authenticationRestrictions: [ {
clientSource: ["192.0.2.0"],
serverAddress: ["198.51.100.0"]
} ]
}
)

Observação

Para usar SCRAM-SHA-256, o featureCompatibilityVersion deve ser configurado para 4.0. Para mais informações sobre featureCompatibilityVersion, consulte Obter FeatureCompatibilityVersion e setFeatureCompatibilityVersion.

A operação a seguir cria um usuário com apenas SCRAM-SHA-256 credenciais.

Dica

A partir da versão 4.2 do shell mongo, você pode usar o método passwordPrompt() em conjunto com vários métodos/comandos de autenticação/gerenciamento de usuário para solicitar a senha em vez de especificar a senha diretamente na chamada de método/comando. No entanto, você ainda pode especificar a senha diretamente como faria com versões anteriores do shell mongo .

use reporting
db.createUser(
{
user: "reportUser256",
pwd: passwordPrompt(), // Or "<cleartext password>"
roles: [ { role: "readWrite", db: "reporting" } ],
mechanisms: [ "SCRAM-SHA-256" ]
}
)

Se o parâmetro authenticationMechanisms for definido, o campo mechanisms só poderá incluir valores especificados no parâmetro authenticationMechanisms.

← db.changeUserPassword()