mongodb 备份角色 - mongodump

mongodb backup role - mongodump

我们有一个开发团队会定期从 DEV 中取出 mongodump,然后将其恢复到本地主机以供工作。我们最近在 mongodb 中实施了身份验证,我希望能够让我们的开发团队仅在一个数据库上执行 mongodump,以便他们可以将其恢复到本地主机。

我有一个角色继承了Admin的备份角色,但那是给我们DBA备份整个系统的。

我的问题是,如何允许特定用户(我们称之为 "webdev")为特定数据库(我们称之为 "products")使用此备份角色?

您可以在 products 数据库中创建具有读取权限的用户:

> use products
> db.createUser(  {
 user: "webdev",
 pwd: "password",
 roles: [ "read" ]
 } )

记得用--excludeCollectionsWithPrefix=system

调用mongodump
mongodump --excludeCollectionsWithPrefix=system

为了避免权限错误(假设你使用的是Mongo3)

我正在使用 MongoDB3.4 版本,首先你需要一个管理员数据库的根访问权限并连接 mongo shell,

$ mongo -u username -p xxxxxx --authenticationDatabase admin

连接后mongoshell,更改数据库,

use products

更改数据库后创建新用户,

db.createUser(
  {
    user: "webdev",
    pwd: "xxxxx",
    roles: [
       { role: "read", db: "products" },
       { role: "backup", db: "products"}
    ]
  }
)

上面我提到,webdev 用户可以读取所有集合并进行备份访问。

db.auth('webdev', 'xxxxx')

成功验证后,您可以从 DEV 服务器 读取和备份。

下面我提到了 mongo使用新 webdev 用户转储查询。

mongodump --host hostname --port 27017 --username webdev --password xxxxx --authenticationDatabase products --db products --collection collection_name --out mongodump_outpath

参考:https://docs.mongodb.com/manual/reference/built-in-roles/#backup

注:

  1. 不要在生产中频繁使用 mongo转储。它将影响 性能问题。
  2. 不要向开发人员等任何其他团队提供备份和恢复权限, 测试仪等
  3. 管理员或 DBA 每次只做 Backup/Restore。

    谢谢。如有任何问题,请回复。