我们有一个开发团队,他们会定期从DEV中取出一个mongodump,然后将其恢复到本地主机以供工作。我们最近在mongodb中实现了身份验证,我希望能够允许我们的开发团队只在一个DB上做一个mongodb,这样他们就可以将其恢复到本地主机。
我有一个角色继承了Admin的备份角色,但这是为了我们的DBA备份整个系统。
我的问题是,我如何允许这个备份角色被一个特定的用户(我们称之为"webdev")用于一个特定的数据库(我们称之为"产品")?
可以在products
数据库中创建一个具有读权限的用户:
> use products
> db.createUser( {
user: "webdev",
pwd: "password",
roles: [ "read" ]
} )
请记住使用--excludeCollectionsWithPrefix=system
调用mongodump
mongodump --excludeCollectionsWithPrefix=system
为了避免权限错误(假设您使用的是Mongo 3)
我使用的是MongoDB3.4版本,首先你想要一个root访问admin数据库和连接mongo shell,
$ mongo -u username -p xxxxxx——authenticationDatabase admin
连接完mongoshell后,修改数据库,
use products
修改DB后创建新用户,
db.createUser(
{
user: "webdev",
pwd: "xxxxx",
roles: [
{ role: "read", db: "products" },
{ role: "backup", db: "products"}
]
}
)
上面我提到过,webdev用户可以读取所有的集合和备份访问。
db.auth('webdev', 'xxxxx')
验证成功后,您可以从DEV服务器读取和获取备份。下面我提到了mongodb查询新的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/备份
注意:
- 不要在生产中频繁使用mongodb。它会影响性能问题。
- 不要把备份和恢复权限给任何其他团队,比如开发者,测试人员,. .等
Admin或DBA只在每次备份/恢复时执行。
谢谢。