从安全的Mongo数据库中进行Mongodump

3
为了连接到这个[安全]的Mongo实例,我需要运行以下命令:
mongo --ssl --host sampleHostname --sslPEMKeyFile /path/to/user.pem --sslCAFile /path/to/mongoca.cer --authenticationDatabase '$external' --authenticationMechanism=MONGODB-X509
我尝试使用mongodump命令获取数据,但是我一直遇到以下错误: 尝试1 mongodump -d mydb
失败:无法连接到数据库服务器的错误。 尝试2 不能创建带有--db的mongodump备份。身份验证失败 mongodump -d mydb --authenticationDatabse '$external'
失败:无法连接到数据库服务器的错误。 尝试3 使用与连接相同的命令。

mongodump -d mydb --ssl --host sampleHostname --sslPEMKeyFile /path/to/user.pem --sslCAFile /path/to/mongoca.cer --authenticationDatabase '$external' --authenticationMechanism=MONGODB-X509

失败: 获取数据库 'mydb' 的集合时出错:运行 'listCollections' 时出错。数据库: 'mydb' 错误: 没有在 'mydb' 上执行命令的授权 {listCollections: 1, cursor: {} }

我尝试使用sudo运行相同的命令,但仍然返回相同的错误。

第4次尝试 使用mongodump的最小权限(转储特定的数据库)

mongodump -d mydb --ssl --host sampleHostname --sslPEMKeyFile /path/to/user.pem --sslCAFile /path/to/mongoca.cer --authenticationDatabase '$external' --authenticationMechanism=MONGODB-X509 --excludeCollection=system.indexes

失败:获取数据库'mydb'的集合时出错:运行'listCollections'时出错。数据库:'mydb',错误:未被授权在'mydb'上执行命令{listCollections: 1, cursor: {} }

我陷入了困境,最终将运行mongorestore,但我不想在确保能够备份之前运行它。我想象中的mongodump的解决方案将解决我可能遇到的任何问题,包括mongorestore(如果有的话)。


好的,谢谢。关于调试还有两个建议:1)您可以尝试转储数据库中的特定集合,使用 --collection 标志。2)我对 --authenticationDatabase 不是很熟悉,所以这可能是一个无用的点,但您能确保用户具有管理员权限吗? - Adam
1
@Joey,我怀疑你的用户权限有问题;它是否确实拥有_mydb_数据库的_dbOwner_角色?请记住,所有内容都区分大小写。 - Vince Bowdren
1
@Adam 是的,它返回25。 - Joey
1
@VinceBowdren 系统中只有2个用户。一个是具有"userAdminAnyDatabase"角色的管理员用户,用于admin数据库;另一个用户是我,拥有2个角色。一个是mydb数据库的"dbOwner"角色,另一个是mydb数据库的"readWrite"角色。 - Joey
@Joey 我有完全相同的问题,到目前为止还没有找到解决方案,你这边有进展吗? - jocelyn
显示剩余4条评论
1个回答

1
我通过这篇博客文章找到了解决方案,看起来在使用509和$external时,需要将-u值设置为CN。
mongodump --ssl --sslPEMKeyFile user.pem --sslCAFile cap.pem --sslAllowInvalidHostnames --authenticationMechanism=MONGODB-X509 --authenticationDatabase '$external'  --host "rsTmpCloudManager/10.100.15.118:27017,10.100.16.237:27017,10.100.17.107:27017" -d testJoce -u "CN=???,OU=???,O=???,L=???,ST=???,C=??"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接