MongoDB- 备份和恢复用户和角色

MongoDB- backing up and restoring users and roles

在 Mongo 个实例之间同步用户和角色的最佳做法是什么?

在同一台 Windows 机器上,我试图将 admin 数据库中的 MongoDB 用户和角色从一个 Mongo 实例复制到另一个实例。每个实例的身份验证是 'on'。 mongodump\mongorestore 或 mongoexport\mongoimport 我试过的组合都没有用。使用 mongodump\restore,还原步骤显示:

假设转储目录中的用户来自 <= 2.4(授权版本 1) 失败:转储中的用户和角色集合具有与目标服务器不兼容的身份验证版本:无法将身份验证版本 1 的用户还原到身份验证版本 5 的服务器

我发现没有命令行选项告诉它不要做这种愚蠢的事情。我有 Mongo 版本 4,就是这样安装的。

您会认为 --dumpDbUsersAndRoles 和 --restoreDbUsersAndRoles 会 是对称的,但它们不是。

我能够 运行 这个, mongoexport -p 27017 -u admin --password please -d admin --collection system.roles --out myRoles.json

但是,在尝试 mongoimport 时

mongoimport -p 26017 -u admin --password please -d admin --collection "system.roles" --file myRoles.json

输出显示 验证设置错误:集合名称无效:集合名称 'system.roles' 不允许以 'system.'

开头

入门

用户已附加到数据库。理想情况下,您将特定于数据库的用户存储在相应的数据库中。所有“全局”用户都应该进入管理员。好的部分:副本集负责将这些用户同步到副本集的每个成员。

解决方案

话虽如此,关于如何处理这个问题似乎很明显。 对于最坏的情况,准备好 .js 会容易得多,它只是重新创建 3-4 个全局角色 摆弄管理数据库中的 system.* 集合。这样做的好处是您还可以自动执行其他设置,例如 TSHTF 时的分片设置,并且您需要从头开始重建集群。

use admin;
db.createRole([...])
db.createRole([...])
// do other stuff, like sharding setup

Run it 使用

针对副本集的主节点或 mongos 实例(如果您有分片集群)
mongo daHost:27017/admin myjsfile.js

在设置计算机之后但在启用身份验证之前。

另一种选择是使用 Ansible 来创建用户。

至于转储和恢复,您可能希望省略集合名称。