在Mongo实例之间同步用户和角色的最佳实践是什么?
在同一台Windows机器上,我试图将管理数据库中的MongoDB用户和角色从一个Mongo实例复制到另一个实例。每个实例的身份验证都处于"打开"状态。没有mongodump\mongorestore或mongoexport\mongoimport的组合我尝试过作品。使用mongodump\restore,还原步骤显示:
假设转储目录中的用户来自<2.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创建用户。
至于转储和还原,您可能希望省略集合名称。