我认为我做错了什么,但文档尚未为我指明正确的方向。
我正在将自托管的MongoDB实例数据库迁移到MongoDB Atlas平台。我已经使用mongorestore
成功上载了转储,但是现在我的users
对象都无法进行身份验证。我想说的是,我在文档中某处读到您无法迁移已有的用户或其他东西?
这是我用来从转储中还原的命令
mongorestore --host <MY_CLUSTER>:27017 --nsExclude 'admin.system.*' --ssl --username <USER> --password <PASSWORD> --authenticationDatabase admin --gzip --db=<DB_NAME> .backups/12-23-2019/backup/
答案 0 :(得分:0)
mongorestore
具有用于还原用户和角色的特定选项:--restoreDbUsersAndRoles
(请注意,仅当您备份整个实例或将--dumpDbUsersAndRoles
选项与mongodump
一起使用时,此方法才有效一个--db
)。
无论如何,Atlas不支持从源数据库迁移用户,因为它从Atlas控制台而不是数据库本身管理用户。可以使用Database Access
菜单选项在Atlas中创建用户。
来自Atlas Manual:
Atlas完全管理MongoDB数据库用户创建。如果源集群强制执行身份验证,请使用mongorestore --nsExclude排除admin.system。*名称空间。您不能将任何现有的用户或角色信息迁移到Atlas。
答案 1 :(得分:0)
您无法将用户恢复为之前所述的Atlas结构
除非您要使用“数据库访问”面板并一个一个地创建(痛苦),否则必须配置mongocli环境以在Atlas集群中大规模创建用户。
我们不会详细介绍如何配置mongocli,但是一旦完成,我就制作了一个简单的脚本,该脚本将从原始服务器中检索所有用户,并将脚本检索到将用户创建到mongocli中,它使用mongo shell和jq。
mongo mongodb://youroriginalcluster --quiet --eval 'db.system.users.find({}, {"user" : 1, "db" : 1, "roles" : 1}).toArray();' | jq -r '.[] | " mongocli atlas dbuser create --username \(.user) --password PASSWORD --role \(.roles[].role)@\(.db)"'
仍然需要进行一些小的调整,并且不会检索密码,但是应该可以节省一些时间