MongoDB-备份和还原用户和角色

时间:2018-12-29 02:04:42

标签: mongodb mongoimport mongodump mongoexport mongorestore

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

在同一台Windows计算机上,我试图将管理数据库中的MongoDB用户和角色从一个Mongo实例复制到另一个实例。每个实例的身份验证均处于“启用”状态。我尝试过的mongodump \ mongorestore或mongoexport \ mongoimport不能组合使用。使用mongodump \ restore,还原步骤将显示:

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

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

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

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

但是,当尝试mongoimport时

mongoimport -p 26017 -u admin --password请-d admin --collection“ system.roles” --file myRoles.json

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

1 个答案:

答案 0 :(得分:0)

Primer

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

解决方案

话虽如此,在如何处理上似乎很明显。 在最坏的情况下,准备好.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创建用户。

对于转储和还原,您可能要忽略集合名称。

相关问题