db.createUser()
Definição
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.O método
db.createUser()
tem a seguinte sintaxe:CampoTipoDescriçãouser
documentoO documento com autenticação e informações de acesso sobre o usuário a ser criado.writeConcern
documentoOpcional. O nível de preocupação de gravação para a operação. Consulte Especificação de write concern.
O documento
user
define o usuário e tem o seguinte formulário:Dica
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 shellmongo
.{ 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:CampoTipoDescriçãouser
stringO nome do novo usuário.pwd
stringA senha do usuário. O campo
pwd
não será exigido se você executar odb.createUser()
no banco de dados do$external
para criar usuários com 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.
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 shellmongo
.customData
documentoOpcional. 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
arrayAs funções concedidas ao usuário. Pode especificar uma array vazia[]
para criar usuários sem papéis.arrayOpcional. 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.
Novidade na versão 3.6.
mechanisms
arrayOpcional. 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 doauthenticationMechanisms
.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
eSCRAM-SHA-256
.passwordDigestor
stringOpcional. 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 comSCRAM-SHA-256
)- O cliente digere a senha e passa a senha digerida para o servidor.
Funções
No campo roles
, é possível especificar roles incorporadas e roles definidas pelo usuário.
Para especificar uma função que existe no mesmo banco de dados onde o db.createUser()
é executado, você pode especificar a função com o próprio 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.
Restrições de autenticação
Novidade na versão 3.6.
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()
encapsula o comando createUser
.
Compatibilidade
Esse método está disponível em implantações hospedadas nos seguintes ambientes:
Importante
Este comando não é suportado em clusters MongoDB Atlas . Para obter informações sobre o suporte do Atlas para todos os comandos, consulte Comandos não suportados.
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Comportamento
ID do usuário
O MongoDB atribui automaticamente um userId
exclusivo ao usuário na criação.
réplicaSet
Se executado em um conjunto de réplicas, db.createUser()
é executado usando a preocupação de gravação "majority"
por padrão.
Criptografia
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 pelo 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.
Credenciais externas
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 sessões de cliente e garantias de consistência causal 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.
local
Database
Você não pode criar usuários no banco de dados local.
Acesso necessário
Para criar um novo usuário em um banco de dados, você deve ter a
createUser
ação neste recurso do banco de dados.Para conceder funções a um usuário, você deve ter a ação
grantRole
no banco de dados da função.
Os papéis embutidos do userAdmin
e userAdminAnyDatabase
fornecem ações do createUser
e grantRole
em seus respectivos recursos.
Exemplos
A operação db.createUser()
a seguir cria o usuário accountAdmin01
no banco de dados products
.
Dica
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
ereadAnyDatabase
no banco de dadosadmin
a função
readWrite
no banco de dadosproducts
Criar usuário com funções
A seguinte operação cria accountUser
no banco de dados products
e fornece ao usuário as funções readWrite
e dbAdmin
.
Dica
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" ] } )
Criar usuário sem funções
A seguinte operação cria um usuário denominado reportsUser
no banco de dados admin
, mas ainda não atribui funções:
Dica
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: [ ] } )
Criar usuário administrativo com funções
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
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" ] } )
Criar usuário com restrições de autenticação
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
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"] } ] } )
Criar usuário SCRAM-SHA-256
apenas com credenciais
Observação
Para usar o SCRAM-SHA-256, o featureCompatibilityVersion
deve ser configurado para 4.0
. Para obter mais informações sobre featureCompatibilityVersion, consulte Visualizar FeatureCompatibilityVersion e setFeatureCompatibilityVersion
.
A operação a seguir cria um usuário com apenas SCRAM-SHA-256
credenciais.
Dica
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
.