问题描述
使用客户端连接文档数据库服务实例时报错 "Authentication failed", 使用的连接命令如下:
mongo "mongodb://root:<密码>@<IP1:Port1>,<IP2:Port2>/admin?authSource=admin&replicaSet=<setname>"
报错信息如下:
2023-07-19T11:23:54.055+0800 E QUERY [js] Error: Authentication failed. :
DB.prototype._authOrThrow@src/mongo/shell/db.js:1685:20
@(auth):6:1
@(auth):1:2
exception: login failed
原因分析
报错 "Authentication failed" 说明客户端到文档数据库服务实例的网络访问没有问题。一般可能是如下问题:
- 密码错误。
- 用户名和密码不匹配。
- 密码中含有特殊字符。
处理方法
- 确认输入的用户名和密码是否正确,然后使用正确的用户名和密码重试。
- 如果忘记了密码,可以到文档数据库服务的管控控制台界面上进行密码重置。
- 可以使用交互式验证方式来验证是否是特殊字符的问题。交互式验证方式的示例如下,特点是在 Connection URI 中不指定密码信息。
mongo "mongodb://root@<IP1:Port1>,<IP2:Port2>/admin?authSource=admin&replicaSet=<setname>"
执行上述命令之后,会提示进一步输入密码信息。如果交互式验证能够成功,而将密码直接放在 Connection URI 中验证失败,则很有可能是密码中包含有特殊字符。
特殊字符的处理方法是在 Connection URI 中提携手动转义的密码,将 '%' 替换为 '%25', '@' 替换为 '%40','!' 替换为 ''%21. 也就是说将特殊字符替换为 '%' + 16进制ASCII 码的形式。