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



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

在同一台Windows机器上,我试图将管理数据库中的MongoDB用户和角色从一个Mongo实例复制到另一个实例。每个实例的身份验证都处于"打开"状态。没有mongodump\mongorestore或mongoexport\mongoimport的组合我尝试过作品。使用mongodump\restore,还原步骤显示:

假设转储目录中的用户来自&lt2.4(auth版本1)失败:转储中的用户和角色集合的身份验证版本与目标服务器不兼容:无法将身份验证版本1的用户还原到身份验证版本5 的服务器

我找不到命令行选项来告诉它不要做这种愚蠢的事情。我已经安装了Mongo版本4。

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

我能够运行这个,mongoexport-p 27017-u admin-密码请-d admin-收集系统.roles-out myRoles.json

然而,当尝试mongoimport 时

mongoimport-p 26017-u admin--密码请-d admin--集合"system.roles"--文件myRoles.json

输出显示验证设置时出错:无效的集合名称:集合名称"system.roles"不允许以"system"开头

底漆

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

解决方案

话虽如此,如何处理这件事似乎很明显。对于最坏的情况,准备一个.js要容易得多,它只需重新创建3-4个全局角色在管理数据库中篡改CCD_ 2集合。这样做的优点是,您还可以自动执行其他设置工作,比如如果TSHTF需要从头开始重建集群,则可以进行分片设置。

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

使用在副本集的主实例或mongos实例(如果您有分片集群)上运行它

mongo daHost:27017/admin myjsfile.js

在设置机器之后,但在启用身份验证之前。

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

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

最新更新