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.Dica
No
mongosh
, este comando também pode ser executado pelo método assistente dodb.changeUserPassword()
.Os métodos auxiliares são práticos para os usuários
mongosh
, mas podem não retornar o mesmo nível de informações que os comandos do banco de dados. Nos casos em que a praticidade não for necessária ou os campos de retorno adicionais forem necessários, use o comando de banco de dados.Aviso
Ao atualizar a array
roles
, você substitui completamente os valores da array anterior. Para adicionar ou remover funções sem substituir todas as funções existentes do usuário, use os comandosgrantRolesToUser
ourevokeRolesFromUser
.Para atualizar um usuário, você deve especificar o campo
updateUser
e pelo menos um outro campo, diferente dewriteConcern
.
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 usa a seguinte sintaxe:
db.runCommand( { 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 |
---|---|---|
updateUser | string | O nome do usuário a ser atualizado. |
pwd | string | Opcional. A senha do usuário. O valor pode ser:
|
customData | documento | Opcional. Qualquer informação arbitrária. |
roles | array | Opcional. As funções concedidas ao usuário. Uma atualização na array roles substitui os valores da array anterior. |
writeConcern | documento | Opcional. O nível da write concern para a operação. Consulte Especificação de write concern. |
authenticationRestrictions | 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. |
mechanisms | 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:
|
digestPassword | booleano | Opcional. Indica se o servidor ou o cliente digere a senha. Se Se |
comment | 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
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 em implementações autogerenciadas.
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" ] }