Visão geral
Usuários com privilégios apropriados podem alterar suas próprias senhas e dados personalizados. Custom data armazena informações opcionais do usuário.
Considerações
Para gerar uma senha forte para uso neste procedimento, você pode utilizar o comando openssl da utilidade rand. Por exemplo, questão openssl rand com as seguintes opções para criar uma string codificada por base48 de 48 bytes pseudo-aleatórios:
openssl rand -base64 48
Pré-requisitos
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.
Conecte-se como um usuário com privilégios para gerenciar usuários e funções.
Conecte ao mongod ou mongos com privilégios para gerenciar usuários e roles, como um usuário com role userAdminAnyDatabase . O procedimento a seguir usa o myUserAdmin criado em Habilitar controle de acesso em implementações autogerenciadas.
mongosh --port 27017 -u myUserAdmin -p --authenticationDatabase 'admin'
If you do not specify the password to the -p command-line option, mongosh prompts for the password.
Crie uma função com privilégios apropriados.
No banco de dados do admin, create uma nova função com changeOwnPassword e changeOwnCustomData.
use admin db.createRole( { role: "changeOwnPasswordCustomDataRole", privileges: [ { resource: { db: "", collection: ""}, actions: [ "changeOwnPassword", "changeOwnCustomData" ] } ], roles: [] } )
Adicione um usuário com esta função.
No banco de dados do test, create um novo usuário com o papel criado do "changeOwnPasswordCustomDataRole". Por exemplo, a seguinte operação cria um usuário com o papel embutido readWrite e o "changeOwnPasswordCustomDataRole" criado pelo usuário.
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 shell mongo.
use test db.createUser( { user:"user123", pwd: passwordPrompt(), // or cleartext password roles:[ "readWrite", { role:"changeOwnPasswordCustomDataRole", db:"admin" } ] } )
Para conceder a um usuário existente a nova role, utilize db.grantRolesToUser().
Procedimento
Conecte-se com os privilégios apropriados.
Conecte ao mongod ou mongos como um usuário com privilégios apropriados.
Por exemplo, a seguinte operação conecta ao MongoDB como user123 criado na seção Pré-requisitos.
mongosh --port 27017 -u user123 --authenticationDatabase 'test' -p
If you do not specify the password to the -p command-line option, mongosh prompts for the password.
To check that you have the privileges specified in the Prerequisites section as well as to see user information, use the usersInfo command with the showPrivileges option.
Altere sua senha e dados personalizados.
Utilize o método db.updateUser() para atualizar a senha e os dados personalizados.
Por exemplo, a seguinte operação altera a senha do usuário para KNlZmiaNUp0B e dados personalizados { title: "Senior Manager" } para
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 shell mongo.
use test db.updateUser( "user123", { pwd: passwordPrompt(), // or cleartext password customData: { title: "Senior Manager" } } )
Digite a senha quando solicitado.