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().