在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”开头。
答案 0 :(得分:0)
用户已附加到数据库。理想情况下,您将数据库特定的用户存储在相应的数据库中。所有“全局”用户都应该进入管理员状态。好处是:副本集负责将这些用户同步到副本集的每个成员。
话虽如此,在如何处理上似乎很明显。
在最坏的情况下,准备好.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创建用户。
对于转储和还原,您可能要忽略集合名称。