Listar todos los usuarios en Mongo Shell

Tahseen Tauseef 20 junio 2023
  1. Autenticar un usuario
  2. Listar todos los usuarios en Mongo Shell
  3. Método db.getUser() en MongoDB
  4. Método db.getUsers() en MongoDB
Listar todos los usuarios en Mongo Shell

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

Autenticar un usuario

Para autenticarse como usuario, el usuario debe proporcionar un nombre de usuario, una contraseña y la base de datos de autenticación asociada con ese usuario. Por lo tanto, es imposible cambiar entre usuarios en la misma sesión mongosh.

Autenticarse como un usuario diferente significa que la sesión tiene los privilegios de ambos usuarios autenticados. Puede salir y reiniciar mongosh para cambiar entre los usuarios.

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

El uso de mongosh se conecta a la instancia mongod o mongos.

mongosh --port 27017

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

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

El método passwordPrompt() solicita al usuario que introduzca la contraseña. El usuario también puede especificar su contraseña directamente como una cadena.

Se recomienda utilizar el método passwordPrompt() para evitar que la contraseña sea visible en su pantalla y potencialmente filtrar la contraseña a su historial de shell. En su lugar, ingrese la contraseña cuando se le solicite.

Listar todos los usuarios en Mongo Shell

Para enumerar todos los usuarios, puede usar mongosh para consultar la colección system.users.

use admin
db.system.users.find()

No debe modificar la colección system.users directamente. Para administrar los usuarios, puede utilizar los comandos de administración de usuarios designados.

Por ejemplo, para enumerar todos los usuarios de un clúster fragmentado creado a través de un mongos, conéctese a un mongos y ejecute el siguiente comando. MongoDB almacena los usuarios creados a través de un mongos en la base de datos admin de los servidores de configuración.

Para enumerar todos los fragmentos, los usuarios locales pueden conectarse directamente al fragmento respectivo y ejecutar el siguiente comando. MongoDB se utiliza para almacenar usuarios locales de fragmentos en la base de datos admin del propio fragmento.

Estos usuarios locales fragmentados son independientes de los agregados al clúster fragmentado a través de un mongos. Los usuarios de fragmento local están restringidos al fragmento y no están disponibles para mongos.

Método db.getUser() en MongoDB

Este método tiene la siguiente sintaxis.

db.getUser(username, args)

Este método devolverá la información de usuario para un usuario específico. El usuario puede ejecutar este método en la base de datos del usuario.

Debe existir en la base de datos en la que se ejecuta el método. El método db.getUser() consta de los siguientes parámetros.

db.getUser( "<username>", {
   showCredentials: <Boolean>,
   showPrivileges: <Boolean>,
   showAuthenticationRestrictions: <Boolean>,
   filter: <document>
} )
Parámetro Tipo Descripción
username cadena El nombre del usuario para el que se recuperará la información.
args documento Opcional. Un documento que especifica argumentos adicionales.

El documento args admite los siguientes campos.

Campo Tipo Descripción
showCredentials booleano Este campo es opcional. Establezca este campo en true para mostrar el hash de la contraseña del usuario. Por defecto, este campo es false.
showPrivileges booleano Este campo es opcional. Establezca este campo en true para ver los privilegios completos del usuario, incluida la información ampliada. Por defecto, este campo es false. Si ve todos los usuarios, no puede especificar este campo.
showAuthenticationRestrictions booleano Este campo es opcional. Establezca este campo en true para mostrar las restricciones de autenticación del usuario. Por defecto, este campo es false. Si ve todos los usuarios, no puede especificar este campo.
filter documento Este campo es opcional. Este documento especifica las condiciones de la etapa $match para devolver información para los usuarios que coincida con las condiciones del filtro.

El método db.getUser() está incluido en el comando usersInfo.

El usuario debe tener la acción viewUser en la base de datos del otro usuario para ver la información de otro usuario. Los usuarios tienen acceso a sus datos.

Ejemplo:

Las siguientes operaciones devolverán información sobre un ejemplo de usuario appClient en una base de datos de cuentas.

use accounts
db.getUser("appClient")

El resultado 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

Este método tiene la siguiente sintaxis.

db.getUsers(<options>)

Este método devolverá la información de todos los usuarios de la base de datos. El método db.getUsers() está incluido en el comando usersInfo: 1.

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

db.getUsers( {
   showCredentials: <Boolean>,
   filter: <document>
} )
Campo Tipo Descripción
showCredentials booleano Este campo es opcional. Puede establecer el campo en true para mostrar el hash de la contraseña del usuario. Por defecto, este campo es false.
filter documento Este campo es opcional. Este documento especifica las condiciones de la etapa $match para devolver información para los usuarios que coinciden con las condiciones del filtro.

El usuario debe tener la acción viewUser en la base de datos del otro usuario para ver la información de otro usuario. Los usuarios pueden ver su información.

Ejemplo:

Ver todos los usuarios de una base de datos determinada que coincida con el filtro especificado.

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

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

Mientras visualiza todos los usuarios, puede especificar la opción showCredentials, pero no la opción showPrivileges o showAuthenticationRestrictions.

Entonces, con la ayuda de este artículo de MongoDB, aprendió 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().

Artículo relacionado - MongoDB User