db.updateUser()
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
roles
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 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 e comandos de gerenciamento de autenticação de usuário para solicitar a senha em vez de especificar a senha diretamente na chamada de método ou 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çãousername
stringO nome do usuário a ser atualizado.update
documentoUm documento contendo os dados de substituição para o usuário. Esses dados substituem completamente os dados correspondentes para o usuário.writeConcern
documentoOpcional. O nível da write concern para a operação. Consulte Especificação de write concern.
O documento
update
especifica os campos para atualizar e seus novos valores. Todos os campos no documentoupdate
são opcionais, mas deve incluir pelo menos um campo.O documento
update
tem os seguintes campos:CampoTipoDescriçãocustomData
documentoOpcional. Qualquer informação arbitrária.roles
arrayOpcional. As funções concedidas ao usuário. Uma atualização na arrayroles
substitui os valores da array anterior.pwd
stringOpcional. 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 e comandos de gerenciamento de autenticação de usuário para solicitar a senha em vez de especificar a senha diretamente na chamada de método ou comando. No entanto, você ainda pode especificar a senha diretamente como faria com versões anteriores do shellmongo
.authenticationRestrictions
arrayOpcional. 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
arrayOpcional. O mecanismo ou mecanismos SCRAM específicos para as credenciais do usuário. Se
authenticationMechanisms
for 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
.
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.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.
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 o usuário para usar SCRAM-SHA-256
somente as credenciais
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 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 omechanisms
para 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
, opasswordDigestor
deve ser o valor padrão"server"
.
use reporting db.updateUser( "reportUser256", { mechanisms: [ "SCRAM-SHA-256" ] } )