Подтвердить что ты не робот

Минимальное разрешение для использования mongodump (для сброса определенного db)

Мы не можем найти какой-либо убедительный документ о том, какие разрешения (роли пользователей) необходимы для запуска mongodump на конкретном db.

Скажем, у меня есть db с именем x и пользователь y на нем со следующими ролями roles: [ "readWrite", "dbAdmin" ], а также 2 пользователя a и b в admin коллекции с roles: [ "userAdminAnyDatabase" ] и roles: [ "dbAdminAnyDatabase" ], кажется, что ни один из них не имеет правильного разрешения для запуска 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 }

Нам нужно упустить что-то очевидное, но , что ищет mongodump при сбрасывании базы данных и в каком разрешении она нужна?

PS: в качестве бонуса мы хотели бы выяснить, какие роли пользователя необходимы для сброса определенной коллекции, а также всех db (s).

4b9b3361

Ответ 1

TL; DR. Для mongodb 2.4 вам нужен хотя бы пользователь с ролью read, а также userAdmin на db. Или вы столкнетесь с ошибкой, с которой мы столкнулись в вопросе при сбросе system.users.bson на такой db.


Таким образом, мы упустили важную ссылку: man mongodump

Однако вам нужно иметь mongodump 2.4.x, чтобы увидеть соответствующий раздел, так что вот ссылка через 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.

PS: в настоящее время no way пропускать определенные коллекции, поэтому, если вы только прочитали или прочиталиWrite роль на db, вам нужно сбросить каждую коллекцию отдельно.

Ответ 2

К счастью mongodump 3.0 принимает варианты пропуска некоторых коллекций.

Это решило мою проблему, не имея доступа администратора к базе данных для настройки прав доступа. Пожалуйста, имейте в виду, что вы больше не будете создавать полные резервные копии.

mongodump --excludeCollection=system.indexes

или

mongodump --excludeCollectionsWithPrefix=system

Ответ 3

Плохая память для меня тоже. Но, наконец, понять это... На самом деле это так просто. Вам просто нужно добавить пользователя с backup роль для mongodump и restore роль для mongorestore.

Роль

backup: Предоставляет минимальные привилегии, необходимые для резервного копирования данных. Эта роль обеспечивает достаточные привилегии для использования агента резервного копирования MongoDB Cloud Manager, агента резервного копирования Ops Manager или для использования mongodump для резервного копирования всего экземпляра mongod.

Роль

restore: предоставляет привилегии, необходимые для восстановления данных из резервных копий, которые не включают данные коллекции system.profile. Эта роль достаточна для восстановления данных с помощью mongorestore без опции -oplogReplay.

Например, вы можете создать пользователя резервного копирования следующим образом:

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

Ответ 4

Этот минимальный набор привилегий, кажется, отлично работает для меня (обратите внимание, что встроенная роль "backup" существует только в базе данных "admin" ). Первая привилегия необходима, чтобы избавиться от [myDb.system.indexes: не авторизовано на myDb для выполнения команды {count: "system.indexes", query: {}}] error:

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