Definición
updateUserActualiza el perfil del usuario en la base de datos donde se ejecuta el comando. Una actualización de un campo reemplaza completamente los valores del campo anterior, incluyendo las actualizaciones de
roleslasauthenticationRestrictionsmatrices y del usuario.Tip
mongoshEn, este comando también se puede ejecutar a través deldb.changeUserPassword()método auxiliar.Los métodos asistente son convenientes para usuarios de
mongosh, pero es posible que no proporcionen el mismo nivel de información que los comandos de base de datos. En los casos en que no se necesite la conveniencia o se requieran campos de retorno adicionales, utiliza el comando de base de datos.Advertencia
Al actualizar la
rolesmatriz, se reemplazan completamente los valores de la matriz anterior. Para agregar o eliminar roles sin reemplazar todos los roles existentes del usuario, use los comandosgrantRolesToUserrevokeRolesFromUsero.Para actualizar un usuario, debe especificar el campo
updateUsery al menos otro campo, distinto dewriteConcern.
Compatibilidad
Este comando está disponible en implementaciones alojadas en los siguientes entornos:
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Importante
Este comando no es compatible con los clústeres de MongoDB Atlas. Para obtener información sobre el soporte de Atlas para todos los comandos, consulta Comandos no compatibles.
Sintaxis
El comando utiliza la siguiente sintaxis:
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 comandos
El comando toma los siguientes campos:
Campo | Tipo | Descripción |
|---|---|---|
| string | El nombre del usuario a actualizar. |
| string | Opcional. La contraseña del usuario. El valor puede ser:
|
| Documento | Opcional. Cualquier información arbitraria. |
| arreglo | Opcional. Los roles asignados al usuario. Una actualización de la matriz |
| Documento | Opcional. El nivel de confirmación de escritura (write concern) de la operación. Consulte Especificación de nivel de confirmación de escritura (write concern). |
| arreglo | Opcional. Las restricciones de autenticación que el servidor impone al usuario. Especifica una lista de direcciones IP y RangosCIDR desde los cuales el usuario puede conectarse al servidor o desde los cuales el servidor puede aceptar usuarios. |
| arreglo | Opcional. El mecanismo o mecanismos SCRAM específicos para las credenciales de usuario. Si se especifica, solo se puede especificar un Si se actualiza el campo de mecanismos sin la contraseña, solo se puede especificar un subconjunto de los mecanismos actuales del usuario y solo se conservan las credenciales de usuario existentes para el mecanismo o los mecanismos especificados. Si se actualiza la contraseña junto con los mecanismos, se almacena un nuevo conjunto de credenciales para el usuario. Los valores válidos son:
|
| booleano | Opcional. Indica si el servidor o el cliente procesa la contraseña. Si es Si |
| any | Opcional. Un comentario proporcionado por el usuario para adjuntar a este comando. Una vez configurado, este comentario aparece junto a los registros de este comando en las siguientes ubicaciones:
Un comentario puede ser de cualquier tipo BSON válido (string, objeto, arreglo, etc.). |
Roles
En el campo roles, puede especificar tanto roles de funcionalidad incorporada como roles definidos por el usuario.
Para especificar un rol que existe en la misma base de datos donde se ejecuta updateUser, puedes especificar el rol utilizando el nombre del rol:
"readWrite"
O puede especificar el rol con un documento, como en:
{ role: "<role>", db: "<database>" }
Para especificar un rol que existe en una base de datos diferente, especifique el rol mediante un documento.
Restricciones de autenticación
El documento authenticationRestrictions solo puede contener los campos siguientes. El servidor genera un error si el documento authenticationRestrictions contiene un campo no reconocido:
Nombre de campo | Valor | Descripción |
|---|---|---|
| Arreglo de direcciones IP y/o rangos CIDR | Si está presente, al autenticar a un usuario, el servidor verifica que la dirección IP del cliente esté en la lista proporcionada o que pertenezca a un rango CIDR de la lista. Si la dirección IP del cliente no está presente, el servidor no autentica al usuario. |
| Arreglo de direcciones IP y/o rangos CIDR | Una lista de direcciones IP o rangos CIDR a los que el cliente puede conectarse. Si está presente, el servidor verificará que la conexión del cliente haya sido aceptada mediante una dirección IP de la lista proporcionada. Si la conexión fue aceptada desde una dirección IP no reconocida, el servidor no autentica al usuario. |
Importante
Si un usuario hereda múltiples roles con restricciones de autenticación incompatibles, ese usuario se vuelve inutilizable.
Por ejemplo, si un usuario hereda un rol en el que el campo clientSource es ["198.51.100.0"] y otro rol en el que el campo clientSource es ["203.0.113.0"], el servidor no puede autenticar al usuario.
Para obtener más información sobre la autenticación en MongoDB,consulte Autenticación.
Comportamiento
Advertencia
De forma predeterminada, updateUser envía todos los datos especificados a la instancia de MongoDB en texto sin cifrar, incluso si passwordPrompt() se usa. Utilice el cifrado de transporte TLS para proteger las comunicaciones entre los clientes y el servidor, incluida la contraseña enviada updateUser por. Para obtener instrucciones sobre cómo habilitar el cifrado de transporte TLS, consulte Configurar mongod y mongos para TLS/SSL.
MongoDB no almacena la contraseña en texto sin formato. La contraseña es vulnerable solo durante el tránsito entre el cliente y el servidor, y únicamente si el cifrado de transporte TLS no está activado.
Acceso requerido
Debe tener acceso que incluya la revokeRole acción en todas las bases de datos para poder actualizar la matriz roles de un usuario.
Debe tener la grantRole acción en la base de datos de un rol para agregar un rol a un usuario.
Para cambiar el campo pwd o de otro customData usuario, debe tener las changePassword acciones changeCustomData y respectivamente en la base de datos de ese usuario.
Para modificar su propia contraseña y datos personalizados, debe tener privilegios que otorguen changeOwnPassword y changeOwnCustomData acciones respectivamente en la base de datos del usuario.
Ejemplo
Dado un usuario appClient01 en la base de datos products con la siguiente información de usuario:
{ "_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" ] }
El siguiente updateUser comando reemplaza completamente customData los roles datos y del usuario:
use products db.runCommand( { updateUser : "appClient01", customData : { employeeId : "0x3039" }, roles : [ { role : "read", db : "assets" } ] } )
El usuario appClient01 en la base de datos products ahora tiene la siguiente información de usuario:
{ "_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" ] }