updateUser
Definição
updateUser
Atualiza o perfil do usuário no banco de dados no qual você executa o comando. Uma atualização em um campo substitui completamente os valores do campo anterior, inclusive atualizações nas arrays
roles
eauthenticationRestrictions
do 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 comandosgrantRolesToUser
ourevokeRolesFromUser
.
Compatibilidade
Esse comando está disponível em implantações hospedadas nos seguintes ambientes:
MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
Importante
Este comando não é suportado em M0, M2, M5 e M10+ clusters. Para obter mais informações, 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
Sintaxe
O comando updateUser
utiliza a seguinte sintaxe. Para atualizar um usuário, você deve especificar o campo updateUser
e pelo menos um outro campo, diferente de writeConcern
:
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
.
{ updateUser: "<username>", 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-mechanism>", ... ], digestPassword: <boolean>, writeConcern: { <write concern> }, comment: <any> }
Campos de comando
O comando utiliza os seguintes campos:
Campo | Tipo | Descrição |
---|---|---|
| string | O nome do usuário a ser atualizado. |
| string | Opcional. A senha do usuário. O valor pode ser:
|
| documento | Opcional. Qualquer informação arbitrária. |
| array | Opcional. As funções concedidas ao usuário. Uma atualização na array |
| documento | Opcional. The level of write concern for the update operation. O documento |
| array | 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. |
| array | Opcional. O mecanismo ou mecanismos SCRAM específicos para as credenciais do usuário. Se 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:
|
| booleano | Opcional. Indica se o servidor ou o cliente digere a senha. Se Se |
| any | Opcional. Um comentário fornecido pelo usuário para anexar a este comando. Depois de definido, esse comentário aparece junto com os registros desse comando nos seguintes locais:
Um comentário pode ser qualquer tipo BSON válido (string, inteiro, objeto, array etc). |
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 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.
Comportamento
Aviso
Por padrão, 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 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" ] }
O comando updateUser
a seguir substitui completamente os dados customData
e roles
do usuário:
use products db.runCommand( { 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" ] }