指定数据库名时Mongoose连接MongoDB遭遇认证失败错误
解决MongoDB指定数据库连接时认证失败的问题
这种情况我碰到过好多次,核心原因基本都是认证数据库不匹配,下面给你分步排查和解决的方法:
1. 最快速的解决方案:指定认证源数据库
MongoDB的管理员用户(比如你的root)默认是创建在admin数据库下的。当你在连接字符串里直接指定storefont时,驱动会自动尝试用storefont数据库做认证,但你的root用户根本不在这个库下,自然就会认证失败。
只需要在连接字符串里加上authSource=admin参数,明确告诉驱动用admin库完成认证:
mongodb://root:password@localhost:27017/storefont?authSource=admin
这个方法90%以上能直接解决你的问题。
2. 确认用户所在的数据库(如果想在目标库认证)
如果你确实希望用storefont数据库做认证,可以按以下步骤操作:
- 先通过无指定数据库的连接字符串登录Mongo shell:
mongosh mongodb://root:password@localhost:27017/ - 切换到
storefont数据库,查看是否存在可用于认证的用户:use storefont db.getUsers() - 如果没有对应的用户,你可以在该库创建一个拥有合适权限的用户(比如读写权限):
db.createUser({ user: "storefont_admin", pwd: "your_password", roles: ["readWrite", "dbAdmin"] })
之后用这个新用户的连接字符串即可正常访问:
mongodb://storefont_admin:your_password@localhost:27017/storefont
3. 排查特殊字符问题(概率较低)
如果你的密码里包含@、/、%这类URL特殊字符,需要对它们进行URL编码后再放到连接字符串里。比如密码是pass@word,要改成pass%40word。
内容的提问来源于stack exchange,提问作者eugenekgn
相关产品推荐
相关产品推荐

