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'
Se você não especificar a senha para a opção de linha de comando -p, o mongosh solicitará a senha.
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/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 .
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
Se você não especificar a senha para a opção de linha de comando -p, o mongosh solicitará a senha.
Para verificar se você tem os privilégios especificados na seção Pré-requisitos, bem como para ver as informações do usuário, use o comando usersInfo com a opção showPrivileges.
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/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 .
use test db.updateUser( "user123", { pwd: passwordPrompt(), // or cleartext password customData: { title: "Senior Manager" } } )
Digite a senha quando solicitado.