Skip to content

Latest commit

 

History

History
196 lines (119 loc) · 14.6 KB

enable-access-control.md

File metadata and controls

196 lines (119 loc) · 14.6 KB

Habilitar el control de acceso

Descripción general

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 mongodinstancia independiente y usa el mecanismo de autenticación predeterminado . Para conocer todos los mecanismos de autenticación admitidos, consulte Mecanismos de autenticación .

Administrador de usuarios

Con el control de acceso habilitado, asegúrese de tener un usuario userAdmino un userAdminAnyDatabaserol en la adminbase 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.

Procedimiento

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 27017y el directorio del /var/lib/mongodbdirectorio 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 MongoDB sin control de acceso.

Inicie una mongodinstancia independiente sin control de acceso.

Por ejemplo, abra una terminal y emita lo siguiente:

mongod --port 27017 --dbpath /var/lib/mongodb

2

Conéctese a la instancia.

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 mongoshell a su implementación, como --host.

3

Cree el administrador de usuarios.

Desde el mongoshell, agregue un usuario con el userAdminAnyDatabaserol en la adminbase de datos. Incluya roles adicionales según sea necesario para este usuario. Por ejemplo, lo siguiente crea el usuario myUserAdminen la adminbase de datos con el userAdminAnyDatabaserol y el readWriteAnyDatabaserol.

CONSEJO: A partir de la versión 4.2 del mongoshell, 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 mongoshell.

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

Reinicie la instancia de MongoDB con control de acceso.

  1. Cierra la mongodinstancia. Por ejemplo, desde el mongoshell, emita el siguiente comando:

    db.adminCommand( { shutdown: 1 } )
    
  2. Sal del mongocaparazón.

  3. Inicie mongodcon el control de acceso habilitado.

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

Conéctese y autentíquese como administrador de usuarios.

Usando el mongocaparazó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 mongoshell con el -u <username>, -py 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

Cree usuarios adicionales según sea necesario para su implementación.

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 myTestera la test base de datos que tiene un readWriterol en la test base de datos y también un readrol en la reporting base de datos.

CONSEJO: A partir de la versión 4.2 del mongoshell, 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 mongoshell.

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 mongoshell.

7

Conéctese a la instancia y autentíquese como myTester.

Después de desconectar el mongoshell 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 mongoshell con el -u <username>, -py 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 mongocarcasa a mongod:

mongo --port 27017

En el mongoshell, 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 mongoshell, 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 mongoshell.

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

8

Inserte un documento como myTester.

Como myTester, tiene privilegios para realizar operaciones de lectura y escritura en la testbase de datos (así como para realizar operaciones de lectura en la reportingbase 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 testbase de datos:

db.foo.insert( { x: 1, y: 1 } )

CONSEJO Ver también:

Administrar usuarios y roles .

Consideraciones adicionales

Conjuntos de réplicas y clústeres fragmentados

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 adminbase de datos. Una vez creado, debe autenticarse como administrador de usuarios para crear usuarios adicionales según sea necesario.