Definição
db.updateUser( username, update, writeConcern )Atualiza o perfil do usuário no banco de dados no qual você executa o método. Uma atualização em um campo substitui completamente os valores do campo anterior. Isso inclui atualizações na array
rolesdo usuário.Aviso
Ao atualizar a matriz
roles, você substitui completamente os valores da matriz anterior. Para adicionar ou remover funções sem substituir todas as funções existentes do usuário, utilize os métodosdb.grantRolesToUser()oudb.revokeRolesFromUser().O método
db.updateUser()utiliza a seguinte sintaxe: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.db.updateUser( "<username>", { customData : { <any information> }, roles : [ { role: "<role>", db: "<database>" } | "<role>", ... ], pwd: passwordPrompt(), // Or "<cleartext password>" authenticationRestrictions: [ { clientSource: ["<IP>" | "<CIDR range>", ...], serverAddress: ["<IP>", | "<CIDR range>", ...] }, ... ], mechanisms: [ "<SCRAM-SHA-1|SCRAM-SHA-256>", ... ], passwordDigestor: "<server|client>" }, writeConcern: { <write concern> } ) O método
db.updateUser()tem os seguintes argumentos.ParâmetroTipoDescriçãousernamestring
O nome do usuário a ser atualizado.
updatedocumento
Um documento contendo os dados de substituição para o usuário. Esses dados substituem completamente os dados correspondentes para o usuário.
writeConcerndocumento
Opcional. O nível da write concern para a operação. Consulte Especificação de write concern.
O documento
updateespecifica os campos para atualizar e seus novos valores. Todos os campos no documentoupdatesão opcionais, mas deve incluir pelo menos um campo.O documento
updatetem os seguintes campos:CampoTipoDescriçãocustomDatadocumento
Opcional. Qualquer informação arbitrária.
rolesarray
Opcional. As funções concedidas ao usuário. Uma atualização na array
rolessubstitui os valores da array anterior.pwdstring
Opcional. A senha do usuário. 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.authenticationRestrictionsarray
Opcional. As restrições de autenticação que o servidor impõe ao usuário. 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.
mechanismsarray
Opcional. O mecanismo ou mecanismos SCRAM específicos para as credenciais do usuário. Se
authenticationMechanismsfor especificado, você só poderá especificar um subconjunto deauthenticationMechanisms.Se atualizar o campo de mecanismos sem a senha, você só poderá especificar um subconjunto dos mecanismos atuais do usuário, e somente as credenciais de usuário existentes para o mecanismo ou mecanismos especificados serão mantidas.
Se atualizar a senha junto com os mecanismos, o novo conjunto de credenciais será armazenado para o usuário.
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.Exige featureCompatibilityVersion definido para
4.0.Requer que o passwordDigestor seja
server.
passwordDigestorstring
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 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.updateUser() é 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 |
|---|---|---|
| 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. |
| 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.updateUser() encapsula o comando updateUser.
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
réplicaSet
Se executado em um conjunto de réplicas, db.updateUser() é executado usando a preocupação de gravação "majority" por padrão.
Criptografia
Aviso
Por padrão, db.updateUser() 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.updateUser(). 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.
Acesso necessário
Você deve ter acesso que inclua a revokeRole ação em todos os bancos de dados para atualizar a array roles de um usuário.
É necessário ter a grantRole ação no banco de dados de uma função para adicionar uma função a um usuário.
Para alterar o campo pwd ou de outro customData usuário, é necessário ter as changePassword ações changeCustomData e, respectivamente, no banco de dados desse usuário.
Para modificar sua própria senha e dados personalizados, você deve ter privilégios que concedam changeOwnPassword e changeOwnCustomData ações respectivamente no banco de dados do usuário.
Exemplo
Dado um usuário appClient01 no banco de dados do products com as seguintes informações de usuário:
{ _id : "products.appClient01", userId : UUID("c5d88855-3f1e-46cb-9c8b-269bef957986"), user : "appClient01", db : "products", customData : { empID : "12345", badge : "9156" }, roles : [ { role : "readWrite", db : "products" }, { role : "read", db : "inventory" } ], mechanisms : [ "SCRAM-SHA-1", "SCRAM-SHA-256" ], authenticationRestrictions : [ { clientSource: ["69.89.31.226"], serverAddress: ["172.16.254.1"] } ] }
O método db.updateUser() a seguir substitui completamente os dados customData e roles do usuário:
use products db.updateUser( "appClient01", { customData : { employeeId : "0x3039" }, roles : [ { role : "read", db : "assets" } ] } )
O usuário appClient01 no banco de dados do products agora tem as seguintes informações de usuário:
{ _id : "products.appClient01", userId : UUID("c5d88855-3f1e-46cb-9c8b-269bef957986"), user : "appClient01", db : "products", customData : { employeeId : "0x3039" }, roles : [ { role : "read", db : "assets" } ], mechanisms : [ "SCRAM-SHA-1", "SCRAM-SHA-256" ], authenticationRestrictions : [ { clientSource: ["69.89.31.226"], serverAddress: ["172.16.254.1"] } ] }
Atualizar usuário para usar apenas SCRAM-SHA-256 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 seguinte operação atualiza um usuário que atualmente tem credenciais do SCRAM-SHA-256 e SCRAM-SHA-1 para ter somente credenciais do SCRAM-SHA-256.
Observação
Se a senha não for especificada junto com o
mechanisms, você somente poderá atualizar omechanismspara um subconjunto dos mecanismos SCRAM atuais para o usuário.Se a senha for especificada junto com o
mechanisms, você poderá especificar qualquer mecanismo ou mecanismo SCRAM suportado.Para
SCRAM-SHA-256, opasswordDigestordeve ser o valor padrão"server".
use reporting db.updateUser( "reportUser256", { mechanisms: [ "SCRAM-SHA-256" ] } )