Habilitar el control de acceso en una implementación de MongoDB fuerza la autenticación, lo que requiere que los usuarios se identifiquen. Al acceder a una implementación de MongoDB que tiene el control de acceso habilitado, los usuarios solo pueden realizar acciones según lo determinen sus roles.
El siguiente tutorial habilita el control de acceso en una mongod
instancia independiente y usa el mecanismo de autenticación predeterminado . Para conocer todos los mecanismos de autenticación admitidos, consulte Mecanismos de autenticación .
Con el control de acceso habilitado, asegúrese de tener un usuario userAdmin
o un userAdminAnyDatabase
rol en la admin
base de datos. Este usuario puede administrar usuarios y roles tales como: crear usuarios, otorgar o revocar roles de usuarios y crear o modificar roles aduaneros.
El siguiente procedimiento primero agrega un administrador de usuarios a una instancia de MongoDB que se ejecuta sin control de acceso y luego habilita el control de acceso.
NOTA: La instancia de ejemplo de MongoDB usa port 27017
y el directorio del /var/lib/mongodb
directorio de datos . El ejemplo asume la existencia del directorio de datos /var/lib/mongodb
. Especifique un directorio de datos diferente según corresponda.
1
Inicie una mongod
instancia independiente sin control de acceso.
Por ejemplo, abra una terminal y emita lo siguiente:
mongod --port 27017 --dbpath /var/lib/mongodb
2
Por ejemplo, abra una nueva terminal y conecte un mongo
shell a la instancia:
mongo --port 27017
Especifique opciones de línea de comando adicionales según corresponda para conectar el mongo
shell a su implementación, como --host
.
3
Desde el mongo
shell, agregue un usuario con el userAdminAnyDatabase
rol en la admin
base de datos. Incluya roles adicionales según sea necesario para este usuario. Por ejemplo, lo siguiente crea el usuario myUserAdmin
en la admin
base de datos con el userAdminAnyDatabase
rol y el readWriteAnyDatabase
rol.
CONSEJO: A partir de la versión 4.2 del mongo
shell, puede usar el passwordPrompt()
método junto con varios métodos / comandos de autenticación / administración de usuario para solicitar la contraseña en lugar de especificar la contraseña directamente en la llamada al método / comando. Sin embargo, aún puede especificar la contraseña directamente como lo haría con versiones anteriores del mongo
shell.
use admin
db.createUser(
{
user: "myUserAdmin",
pwd: passwordPrompt(), // or cleartext password
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)
NOTA: La base de datos donde crea el usuario (en este ejemplo admin
) es la base de datos de autenticación del usuario . Aunque el usuario se autenticaría en esta base de datos, el usuario puede tener roles en otras bases de datos; es decir, la base de datos de autenticación del usuario no limita los privilegios del usuario.
4
-
Cierra la
mongod
instancia. Por ejemplo, desde elmongo
shell, emita el siguiente comando:db.adminCommand( { shutdown: 1 } )
-
Sal del
mongo
caparazón. -
Inicie
mongod
con el control de acceso habilitado.-
Si inicia
mongod
desde la línea de comando, agregue la--auth
opción de línea de comando:mongod --auth --port 27017 --dbpath /var/lib/mongodb
-
Si comienza
mongod
utilizando un archivo de configuración , agregue lasecurity.authorization
configuración del archivo de configuración:security: authorization: enabled
-
Los clientes que se conectan a esta instancia ahora deben autenticarse como usuarios de MongoDB. Los clientes solo pueden realizar acciones según lo determinado por sus roles asignados.
5
Usando el mongo
caparazón, puede:
- Conéctese con la autenticación pasando las credenciales de usuario, o
- Conéctese primero sin autenticación y luego emita el
db.auth()
método para autenticarse.
Autenticar durante la conexiónAutenticar después de la conexión
Iniciar un mongo
shell con el -u <username>
, -p
y las --authenticationDatabase <database>
opciones de línea de comandos:
mongo --port 27017 --authenticationDatabase "admin" -u "myUserAdmin" -p
Introduzca su contraseña cuando se le solicite.6
Una vez autenticado como administrador de usuarios, utilícelo db.createUser()
para crear usuarios adicionales. Puede asignar roles integrados o roles definidos por el usuario a los usuarios.
La siguiente operación agrega un usuario myTester
a la test
base de datos que tiene un readWrite
rol en la test
base de datos y también un read
rol en la reporting
base de datos.
CONSEJO: A partir de la versión 4.2 del mongo
shell, puede usar el passwordPrompt()
método junto con varios métodos / comandos de autenticación / administración de usuario para solicitar la contraseña en lugar de especificar la contraseña directamente en la llamada al método / comando. Sin embargo, aún puede especificar la contraseña directamente como lo haría con versiones anteriores del mongo
shell.
use test
db.createUser(
{
user: "myTester",
pwd: passwordPrompt(), // or cleartext password
roles: [ { role: "readWrite", db: "test" },
{ role: "read", db: "reporting" } ]
}
)
NOTA: La base de datos donde crea el usuario (en este ejemplo test
) es la base de datos de autenticación de ese usuario . Aunque el usuario se autenticaría en esta base de datos, el usuario puede tener roles en otras bases de datos; es decir, la base de datos de autenticación del usuario no limita los privilegios del usuario.
Después de crear los usuarios adicionales, desconecte el mongo
shell.
7
Después de desconectar el mongo
shell como myUserAdmin
, vuelva a conectarlo como myTester
. Usted puede:
- Conéctese con la autenticación pasando las credenciales de usuario, o
- Conéctese primero sin autenticación y luego emita el
db.auth()
método para autenticarse.
Autenticar durante la conexión
Iniciar un mongo
shell con el -u <username>
, -p
y las --authenticationDatabase <database>
opciones de línea de comandos:
mongo --port 27017 -u "myTester" --authenticationDatabase "test" -p
Ingrese la contraseña del usuario cuando se le solicite.8
Autenticar después de la conexión
****
Conecte la mongo
carcasa a mongod
:
mongo --port 27017
En el mongo
shell, cambie a la base de datos de autenticación (en este caso, admin
) y use el db.auth(<username>, <pwd>)
método para autenticarse:
CONSEJO: A partir de la versión 4.2 del mongo
shell, puede usar el passwordPrompt()
método junto con varios métodos / comandos de autenticación / administración de usuario para solicitar la contraseña en lugar de especificar la contraseña directamente en la llamada al método / comando. Sin embargo, aún puede especificar la contraseña directamente como lo haría con versiones anteriores del mongo
shell.
use admin
db.auth("myUserAdmin", passwordPrompt()) // or cleartext password
Como myTester
, tiene privilegios para realizar operaciones de lectura y escritura en la test
base de datos (así como para realizar operaciones de lectura en la reporting
base de datos). Una vez autenticado como myTester
, inserte un documento en una colección en la test
base de datos. Por ejemplo, puede realizar la siguiente operación de inserción en la test
base de datos:
db.foo.insert( { x: 1, y: 1 } )
CONSEJO Ver también:
Administrar usuarios y roles .
Los conjuntos de réplicas y los clústeres fragmentados requieren autenticación interna entre los miembros cuando el control de acceso está habilitado. Para obtener más detalles, consulte Autenticación interna / de membresía .
Excepción de localhost ¶
Puede crear usuarios antes o después de habilitar el control de acceso. Si habilita el control de acceso antes de crear cualquier usuario, MongoDB proporciona una excepción de host local que le permite crear un administrador de usuarios en la admin
base de datos. Una vez creado, debe autenticarse como administrador de usuarios para crear usuarios adicionales según sea necesario.