HOWTO · MongoDB

Listar todos los usuarios en Mongo Shell

Aprenda cómo autenticar a un usuario, enumerar todos los usuarios en el shell de Mongo con show users y usar los métodos db.getUser() y db.getUsers(), siguiendo la documentación de MongoDB 8.0 para mongosh.

En esta página

En este artículo de MongoDB, aprenderá cómo autenticar a un usuario, enumerar todos los usuarios en el shell de Mongo y utilizar los métodos db.getUser() y db.getUsers(). Los comandos y las salidas siguen la documentación de MongoDB 8.0 y se ejecutan en mongosh, el shell de MongoDB.

Los usuarios de MongoDB se definen por base de datos: un usuario existe en una base de datos de autenticación, y cada comando de este artículo se ejecuta contra una base de datos específica. La mayoría de los ejemplos usan la base de datos admin, donde los administradores suelen crear los usuarios.

Autenticar un usuario

Para autenticarse como usuario, debe proporcionar un nombre de usuario, una contraseña y la base de datos de autenticación asociada a ese usuario. No es posible cambiar entre usuarios en la misma sesión de mongosh: autenticarse como un usuario diferente significa que la sesión tiene los privilegios de ambos usuarios autenticados. Para cambiar entre usuarios, salga de mongosh y vuelva a iniciarlo.

Con mongosh, puede autenticarse durante la conexión o autenticarse después de la conexión.

Autenticar durante la conexión

Inicie mongosh con las opciones de línea de comandos -u, -p y --authenticationDatabase:

mongosh --port 27017 --authenticationDatabase "admin" -u "myUserAdmin" -p

Introduzca su contraseña cuando se le solicite.

Autenticar después de la conexión

Conecte mongosh a la instancia mongod o mongos sin credenciales:

mongosh --port 27017

En mongosh, cambie a la base de datos de autenticación (en este caso, admin) y use el método db.auth() o el comando authenticate para autenticarse contra la base de datos de autenticación:

use admin
db.auth("myUserAdmin", passwordPrompt()) // or cleartext password

El método passwordPrompt() le solicita que introduzca la contraseña. También puede especificar su contraseña directamente como una cadena, pero se recomienda passwordPrompt() para evitar que la contraseña sea visible en su pantalla y pueda filtrarse a su historial del shell.

Listar todos los usuarios en el shell de Mongo

El ayudante del shell show users enumera todos los usuarios de la base de datos actual; ejecuta db.getUsers(), que se describe en su propia sección más abajo. Cambie primero a la base de datos cuyos usuarios quiere enumerar — para los usuarios creados en admin, es:

use admin
show users

La salida contiene un documento por usuario, con campos como _id, userId, user, db, roles y mechanisms. Como los usuarios pertenecen a una base de datos, ejecute el comando una vez por base de datos para inspeccionar los usuarios de otra base de datos.

No debe modificar la colección system.users directamente. Para gestionar los usuarios, use los comandos y métodos designados de gestión de usuarios, como db.getUser(), db.getUsers() y db.createUser().

Método db.getUser() en MongoDB

El método db.getUser() devuelve la información de un usuario especificado. Ejecute este método en la base de datos del usuario; el usuario debe existir en esa base de datos, y si el usuario no existe, el método devuelve null. El método tiene la siguiente sintaxis:

db.getUser(username, args)

El método db.getUser() consta de los siguientes parámetros:

Parameter Type Description
username string El nombre del usuario para el que se recupera la información.
args document Opcional. Un documento que especifica argumentos adicionales.

El documento args admite los siguientes campos:

db.getUser( "<username>", {
   showCredentials: <Boolean>,
   showCustomData: <Boolean>,
   showPrivileges: <Boolean>,
   showAuthenticationRestrictions: <Boolean>,
   filter: <document>
} )
Field Type Description
showCredentials Boolean Opcional. Establezca este campo en true para mostrar el hash de la contraseña del usuario. Por defecto, este campo es false.
showCustomData Boolean Opcional. Establezca este campo en false para omitir los customData del usuario de la salida. Por defecto, este campo es true. Nuevo en la versión 5.2.
showPrivileges Boolean Opcional. Establezca este campo en true para mostrar el conjunto completo de privilegios del usuario, incluida la información expandida de los roles heredados. Por defecto, este campo es false. Si visualiza todos los usuarios, no puede especificar este campo.
showAuthenticationRestrictions Boolean Opcional. Establezca este campo en true para mostrar las restricciones de autenticación del usuario. Por defecto, este campo es false. Si visualiza todos los usuarios, no puede especificar este campo.
filter document Opcional. Un documento que especifica condiciones de la etapa $match para devolver información de los usuarios que coinciden con las condiciones del filtro.

El método db.getUser() envuelve el comando usersInfo: <username>. Para ver la información de otro usuario, debe tener la acción viewUser en la base de datos del otro usuario. Los usuarios pueden ver su propia información.

Ejemplo: las siguientes operaciones devuelven información sobre un usuario de ejemplo appClient en una base de datos accounts:

use accounts
db.getUser("appClient")

La salida del ejemplo anterior se muestra a continuación:

{
   _id: 'accounts.appClient',
   userId: UUID("1c2fc1bf-c4dc-4a22-8b04-3971349ce0dc"),
   user: 'appClient',
   db: 'accounts',
   roles: [],
   mechanisms: [ 'SCRAM-SHA-1', 'SCRAM-SHA-256' ]
}

Método db.getUsers() en MongoDB

El método db.getUsers() devuelve la información de todos los usuarios de la base de datos. Envuelve el comando usersInfo: 1 y tiene la siguiente sintaxis:

db.getUsers(<options>)

El método db.getUsers() acepta las siguientes opciones:

db.getUsers( {
   showCredentials: <Boolean>,
   showCustomData: <Boolean>,
   filter: <document>
} )
Field Type Description
showCredentials Boolean Opcional. Establezca este campo en true para mostrar el hash de la contraseña del usuario. Por defecto, este campo es false.
showCustomData Boolean Opcional. Establezca este campo en false para omitir los customData de los usuarios de la salida. Por defecto, este campo es true. Nuevo en la versión 5.2.
filter document Opcional. Un documento que especifica condiciones de la etapa $match para devolver información de los usuarios que coinciden con las condiciones del filtro.

Como con db.getUser(), para ver la información de otro usuario debe tener la acción viewUser en la base de datos del otro usuario, y los usuarios pueden ver su propia información.

Ejemplo: el método db.getUsers() puede aceptar un documento filter para devolver información de los usuarios que coinciden con la condición del filtro. Para ver todos los usuarios de la base de datos actual que tienen credenciales SCRAM-SHA-256, ejecute:

db.getUsers({ filter: { mechanisms: "SCRAM-SHA-256" } })

Al visualizar todos los usuarios, puede especificar la opción showCredentials, pero no las opciones showPrivileges ni showAuthenticationRestrictions.

Con la ayuda de este artículo de MongoDB, ha aprendido cómo autenticar a un usuario, enumerar todos los usuarios en el shell de Mongo y usar los métodos db.getUser() y db.getUsers().