robomongo respaldo query example all mongodb

mongodb - respaldo - Permiso mínimo para usar mongodump(para volcar un db específico)



mongodump query (4)

Afortunadamente, mongodump 3.0 está aceptando opciones para omitir ciertas colecciones.

Esto resolvió mi problema al no tener acceso de administrador a la base de datos para ajustar los permisos. Tenga en cuenta que ya no va a crear copias de seguridad completas.

mongodump --excludeCollection=system.indexes

o

mongodump --excludeCollectionsWithPrefix=system

Parece que no podemos encontrar ningún documento concluyente sobre qué permisos (roles de usuario) se requieren para ejecutar mongodump en un db específico.

Supongamos que tengo un db llamado x un usuario y en él con los siguientes roles roles: [ "readWrite", "dbAdmin" ] , así como 2 usuarios b en la colección de admin con roles: [ "userAdminAnyDatabase" ] y roles: [ "dbAdminAnyDatabase" ] , parece que ninguno de ellos tiene el permiso correcto para ejecutar mongodump :

mongodump --db x --username y --password --authenticationDatabase x Tue Dec 10 17:04:23.901 x.system.users to dump/x/system.users.bson assertion: 11010 count fails:{ ok: 0.0, errmsg: "unauthorized" } mongodump --db x --username a --password --authenticationDatabase admin Tue Dec 10 17:06:19.674 DATABASE: x to dump/x assertion: 13106 nextSafe(): { $err: "not authorized for query on x.system.indexes", code: 16550 } mongodump --db x --username b --password --authenticationDatabase admin Tue Dec 10 17:08:20.678 DATABASE: x to dump/x assertion: 13106 nextSafe(): { $err: "not authorized for query on x.system.namespaces", code: 16550 }

Debemos estar perdiendo algo obvio, pero ¿qué busca mongodump al descargar una base de datos y qué permiso necesita?

PD: como beneficio adicional, nos gustaría averiguar qué roles de usuario se necesitan para volcar una colección específica, así como todos los db (s).


Este conjunto mínimo de privilegios parece funcionar bien para mí (tenga en cuenta que la función integrada de ''copia de seguridad'' existe solo en la base de datos ''admin''). El primer privilegio es necesario para deshacerse de [myDb.system.indexes: no autorizado en myDb para ejecutar el comando {count: "system.indexes", consulta: {}}] error:

db.createRole({ role: "myDumpRole", privileges: [ { resource: { db: "myDb", collection: "system.indexes" }, actions: [ "find"] }, { resource: { db: "myDb", collection: "" }, actions: [ "find", "listCollections", "listIndexes", "indexStats"] } ] });


Mala memoria para mí también. Pero, finalmente, averiguarlo ... En realidad es tan simple. Solo necesita agregar un usuario con el rol de backup para mongodump y restore rol para mongorestore .

función de backup : proporciona los privilegios mínimos necesarios para realizar copias de seguridad de los datos. Esta función proporciona privilegios suficientes para utilizar el agente de copia de seguridad de MongoDB Cloud Manager, el agente de copia de seguridad de Ops Manager, o para utilizar mongodump para realizar una copia de seguridad de una instancia completa de mongod.

rol de restore : proporciona los privilegios necesarios para restaurar datos de las copias de seguridad que no incluyen datos de recopilación de system.profile. Este rol es suficiente cuando se restauran datos con mongorestore sin la opción --oplogReplay.

Por ejemplo, puede crear un usuario de copia de seguridad como este:

> use admin > db.createUser({ user: "backupuser", pwd: "12345", roles: ["backup"] })


TL; DR : para mongodb 2.4, necesita al menos un usuario con rol de read así como userAdmin en la base de datos. O, de lo contrario, se encontrará con el error que enfrentamos en la pregunta al descargar system.users.bson en dicha db.

Así que pasamos por alto una referencia importante: man mongodump

Sin embargo , necesita tener mongodump 2.4.x para ver la sección relevante, por lo que aquí hay una referencia a través de mongodb github docs :

Required User Privileges ------------------------ .. note:: User privileges changed in MongoDB 2.4. The user must have appropriate privileges to read data from database holding collections in order to use :program:`mongodump`. Consider the following :doc:`required privileges </reference/system-defined-roles>` for the following :program:`mongodump` operations: .. list-table:: :header-rows: 1 * - Task - Required Privileges * - All collections in a database except ``system.users``. - :authrole:`read`. [#read-or-read-write]_ * - All collections in a database, including ``system.users``. - :authrole:`read` [#read-or-read-write]_ and :authrole:`userAdmin`. * - All databases. [#profiling-exception]_ - :authrole:`readAnyDatabase`, :authrole:`userAdminAnyDatabase`, and :authrole:`clusterAdmin`. [#cluster-admin]_ See :doc:`/reference/system-defined-roles` and :doc:`/reference/privilege-documents` for more information on user roles. .. [#read-or-read-write] You may provision :authrole:`readWrite` instead of :authrole:`read`. .. [#cluster-admin] :authrole:`clusterAdmin` provides the ability to run the :dbcommand:`listDatabases` command, to list all existing databases. .. [#profiling-exception] If any database runs with profiling enabled, :program:`mongodump` may need the :authrole:`dbAdminAnyDatabase` privilege to dump the ``system.profile`` collection.

PD: actualmente no hay manera de omitir ciertas colecciones, por lo que si solo ha leído o leído el rol de escritura en una base de datos, debe volcar cada colección individualmente.