使用Mongoose+NodeJS连接MongoDB时认证失败问题求助
解决Mongoose连接MongoDB指定数据库时的认证失败问题
问题原因
MongoDB默认会把连接字符串里指定的数据库作为认证源(authSource),但你的root用户是在admin库下创建的(这是MongoDB默认的管理员用户所属库)。当你直接指定Database作为连接目标时,MongoDB会尝试在Database库中验证root用户身份,而该用户在这个库中不存在或无对应权限,所以触发认证失败。
解决方案
显式指定认证源:在连接字符串中添加
authSource=admin参数,强制MongoDB用admin库完成身份验证,示例:mongodb://root:*****@localhost:27017/Database?authSource=admin这是最直接有效的解决方式,无需修改用户权限配置。
为root用户授予目标数据库权限:如果不想依赖
authSource参数,可通过Mongo Shell给root用户添加Database库的读写权限:- 先登录admin库:
mongosh "mongodb://root:*****@localhost:27017/admin" - 执行授权命令(注意类Unix系统下MongoDB区分数据库名大小写):
db.grantRolesToUser("root", [{ role: "readWrite", db: "Database" }])
授权完成后,原连接字符串即可正常使用。
- 先登录admin库:
核对数据库名称准确性:登录admin库后执行
show dbs,确认实际存在的数据库名称和你连接字符串中的是否完全匹配(比如是否是小写database而非Database)。
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

