通过命令参数传入用户名密码时无法连接DocumentDB求助
问题原因
这个问题90%以上的场景是密码包含Shell特殊字符导致:当你直接在命令行参数里传入密码时,如果密码包含$、!、&、*、空格、#、;等Shell预留的特殊字符,Shell会先对这些字符做解析替换,最终传给mongo客户端的密码和你实际设置的密码不一致。而交互式输入密码时,Shell不会做特殊字符解析,所以可以正常认证通过。
少数场景是mongo客户端默认认证数据库匹配异常导致。
解决方案
你可以按以下顺序尝试修复:
- 用单引号包裹密码参数,单引号会阻止Shell解析任何内部特殊字符,示例命令:
mongo --host <myDocDbHost>:27017 --username admin --password '<myPassword>'
注意不要用双引号包裹,双引号仍然会解析$、反引号等特殊字符,无法解决问题。如果你的密码本身包含单引号,将密码里的每个单引号替换为'\''即可正常包裹。
- 如果上面的操作仍然失败,显式指定认证数据库,DocumentDB默认的认证数据库为
admin,补充参数后的命令如下:
mongo --host <myDocDbHost>:27017 --username admin --password '<myPassword>' --authenticationDatabase admin
- 你也可以直接使用带认证信息的连接字符串,同样用单引号包裹整个连接字符串即可:
mongo 'mongodb://admin:<myPassword>@<myDocDbHost>:27017/?authSource=admin'
内容的提问来源于stack exchange,提问作者saketh
相关产品推荐
相关产品推荐

