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 来创建用户。
至于转储和恢复,您可能希望省略集合名称。
在 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 来创建用户。
至于转储和恢复,您可能希望省略集合名称。