Mongo Crear un usuario como administrador para cualquier base de datos genera un error

17

Estoy intentando crear un usuario simple con permiso de derechos para acceder a cualquier base de datos y puedo hacer cualquier acción. Cuando intento ejecutar el createUsercomando, recibo este error:

db.createUser({ user: "mongoadmin" , pwd: "mongoadmin", roles: ["userAdminAnyDatabase", "dbAdminAnyDatabase", "readWriteAnyDatabase"]})
2015-08-20T17:09:42.300+0000 E QUERY    Error: couldn't add user: No role named userAdminAnyDatabase@new_vehicles_catalog

El problema anterior solo ocurre cuando habilito la configuración de autenticación y la necesito.

Entonces, ¿cómo creo un usuario con permiso de administrador para cualquier base de datos? Lo quiero porque configuré mis servicios mongo para usar la conexión de autenticación. Si quiero ejecutar un volcado de mis datos, tengo que usar estos parámetros de autenticación.

Por favor alguna ayuda?

Usando mongo versión 3.0.5 .

el servicio está en Amazon Linux AMI 2015.03 (HVM), tipo de volumen SSD - ami-1ecae776

Robert
fuente

Respuestas:

22

Los roles '... AnyDatabase' deben agregarse a la base de datos de administración para el usuario:

use admin
db.createUser({ user: "mongoadmin" , pwd: "mongoadmin", roles: ["userAdminAnyDatabase", "dbAdminAnyDatabase", "readWriteAnyDatabase"]})

Cualquier base de datos:

  • Roles de usuario de base de datos
  • Roles de administración de bases de datos

Base de datos de administrador:

  • Roles de administración del clúster
  • Roles de respaldo y restauración
  • Roles de todas las bases de datos

Extra: para asignar diferentes roles en diferentes bases de datos y administradores:

db.createUser({user:"replSetManager",pwd:"password",roles:[{role:"clusterManager",db:"admin"},{role:"dbOwner", db:"adminsblog"},{role:"readWrite", db:"departmentblog"},{role:"read", db:"otherblog"}]})
aldwinaldwin
fuente
1
Creo el usuario mongoadmin en la base de datos de administración, pero cuando intento realizar cualquier acción en otra base de datos, aparece un error de autorización.
Robert
¿Qué acciones intentaste? Eche un vistazo a: docs.mongodb.org/manual/reference/built-in-roles
aldwinaldwin
0

Según MongoDB BOL Enable Auth Con el control de acceso habilitado, asegúrese de tener un usuario con userAdmin o userAdminAnyDatabase en la base de datos de administración. Este usuario puede administrar usuarios y roles tales como: crear usuarios, otorgar o revocar roles de usuarios, y crear o modificar roles aduaneros.

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

Procedimiento

Aquí está el siguiente procedimiento a través del cual puede Enable Auth. 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.

mongod --port 27017 --dbpath /data/db1

C:\Program Files\MongoDB\Server\3.6\bin>mongod --auth --port 27017 --dbpath /data/db1
2018-01-02T00:04:21.038-0700 I CONTROL  [initandlisten] MongoDB starting : pid=8048 port=27017 dbpath=/data/db1 64-bit host=ACSD140013
2018-01-02T00:04:21.038-0700 I CONTROL  [initandlisten] targetMinOS: Windows 7/Windows Server 2008 R2
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten] db version v3.6.0
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten] git version: a57d8e71e6998a2d0afde7edc11bd23e5661c915
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.1u-fips  22 Sep 2016
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten] allocator: tcmalloc
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten] modules: none
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten] build environment:
2018-01-02T00:04:21.039-0700 I CONTROL  [initandlisten]     distmod: 2008plus-ssl
2018-01-02T00:04:21.040-0700 I CONTROL  [initandlisten]     distarch: x86_64
2018-01-02T00:04:21.040-0700 I CONTROL  [initandlisten]     target_arch: x86_64
2018-01-02T00:04:21.040-0700 I CONTROL  [initandlisten] options: { net: { port: 27017 }, security: { authorization: "enabled" }, storage: { dbPath: "/data/db1" } }
2018-01-02T00:04:21.044-0700 I -        [initandlisten] Detected data files in /data/db1 created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.
2018-01-02T00:04:21.044-0700 I STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=1508M,session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),statistics_log=(wait=0),verbose=(recovery_progress),
2018-01-02T00:04:21.557-0700 I STORAGE  [initandlisten] WiredTiger message [1514876661:556397][8048:140720576475904], txn-recover: Main recovery loop: starting at 1/35584
2018-01-02T00:04:21.677-0700 I STORAGE  [initandlisten] WiredTiger message [1514876661:676479][8048:140720576475904], txn-recover: Recovering log 1 through 2
2018-01-02T00:04:21.792-0700 I STORAGE  [initandlisten] WiredTiger message [1514876661:792524][8048:140720576475904], txn-recover: Recovering log 2 through 2
2018-01-02T00:04:23.008-0700 I CONTROL  [initandlisten]
2018-01-02T00:04:23.008-0700 I CONTROL  [initandlisten] ** WARNING: This server is bound to localhost.
2018-01-02T00:04:23.009-0700 I CONTROL  [initandlisten] **          Remote systems will be unable to connect to this server.
2018-01-02T00:04:23.010-0700 I CONTROL  [initandlisten] **          Start the server with --bind_ip <address> to specify which IP
2018-01-02T00:04:23.010-0700 I CONTROL  [initandlisten] **          addresses it should serve responses from, or with --bind_ip_all to
2018-01-02T00:04:23.010-0700 I CONTROL  [initandlisten] **          bind to all interfaces. If this behavior is desired, start the
2018-01-02T00:04:23.010-0700 I CONTROL  [initandlisten] **          server with --bind_ip 127.0.0.1 to disable this warning.
2018-01-02T00:04:23.011-0700 I CONTROL  [initandlisten]
2018-01-02T00:04:23.011-0700 I CONTROL  [initandlisten]
2018-01-02T00:04:23.011-0700 I CONTROL  [initandlisten] ** WARNING: The file system cache of this machine is configured to be greater than 40% of the total memory. This can lead to increased memory pressure and poor performance.
2018-01-02T00:04:23.011-0700 I CONTROL  [initandlisten] See http://dochub.mongodb.org/core/wt-windows-system-file-cache
2018-01-02T00:04:23.012-0700 I CONTROL  [initandlisten]
2018-01-02T10:04:23.320+0300 I FTDC     [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db1/diagnostic.data'
2018-01-02T10:04:23.322+0300 I NETWORK  [initandlisten] waiting for connections on port 27017
2018-01-02T10:05:09.214+0300 I NETWORK  [listener] connection accepted from 127.0.0.1:64482 #1 (1 connection now open)

Conéctese a la instancia

Por ejemplo, conecte un mongoshell a la instancia.

mongo --port 27017

Especifique opciones de línea de comandos adicionales según corresponda para conectar el mongoshell a su implementación, como --host.

Crear el administrador del usuario

Por ejemplo, aquí en la base de datos de administración, agregue un usuario con el userAdminAnyDatabaserol. Por ejemplo, lo siguiente crea el usuario myUserAdminen la base de datos de administración :

> use admin
switched to db admin
> use admin
switched to db admin
> db.createUser(
...   {
...     user: "mongoadmin",
...     pwd: "mongoadmin",
...     roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
...   }
... )
Successfully added user: {
        "user" : "mongoadmin",
        "roles" : [
                {
                        "role" : "userAdminAnyDatabase",
                        "db" : "admin"
                }
        ]
}

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.

Desconecte la mongocarcasa.

Reinicie la instancia de MongoDB con control de acceso.

mongodReinicie la instancia con la opción de línea de comando --auth o, si usa un archivo de configuración, la configuración security.authorization .

mongod --auth --port 27017 --dbpath /data/db1

Los clientes que se conectan a esta instancia ahora deben autenticarse como MongoDBusuarios. Los clientes solo pueden realizar acciones según lo determinen sus roles asignados.

Conéctese y autentíquese como administrador de usuarios

Usando el mongoshell, puedes:

  • Conéctese con autenticación pasando las credenciales de usuario, o

  • Conéctese primero sin autenticación y luego emita el método db.auth () para autenticarse.

Para autenticarse durante la conexión Inicie un mongoshell con las -u <username>, -p <password>, and the --authenticationDatabase <database>opciones de línea de comando:

C:\Program Files\MongoDB\Server\3.6\bin>mongo --port 27017 -u "mongoadmin" -p "mongoadmin" --authenticationDatabase "admin"
MongoDB shell version v3.6.0
connecting to: mongodb://127.0.0.1:27017/
MongoDB server version: 3.6.0
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
        http://docs.mongodb.org/
Questions? Try the support group
        http://groups.google.com/group/mongodb-user
2018-01-02T10:05:09.248+0300 I STORAGE  [main] In File::open(), CreateFileW for 'H:\\.mongorc.js' failed with Access is denied.

Para autenticar después de conectar

Conecte el mongoshell a mongod:

mongo --port 27017

Cambie a la base de datos de autenticación (en este caso, admin) y use el método db.auth (,) para autenticar:

> use admin
switched to db admin
> db.auth("mongoadmin","mongoadmin")
1
>
MD Haidar Ali Khan
fuente