迁移到MongoDB Atlas后,以前的用户都无法进行身份验证

时间:2019-12-29 16:25:36

标签: mongodb mongodb-atlas mongorestore

我认为我做错了什么,但文档尚未为我指明正确的方向。

我正在将自托管的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/

2 个答案:

答案 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)"'

仍然需要进行一些小的调整,并且不会检索密码,但是应该可以节省一些时间