指定数据库时Mongoose.connect()连接MongoDB认证失败求助
Mongoose连接MongoDB指定数据库时认证失败的解决方法
你遇到的问题核心是认证数据库不匹配:你的admin账号是在admin系统数据库下创建的,当连接字符串指定database123作为目标库时,MongoDB默认会尝试在database123中验证该账号的合法性,但该账号并不存在于这个库中,因此认证失败。以下是几种可行的解决方式:
方案1:在连接字符串中指定认证数据库
修改连接字符串,添加authSource=admin参数,明确指定使用admin库完成认证,认证通过后自动连接到database123:
const mongoose = require('mongoose'); let conn_string = `mongodb://mongo_uname:mongo_pass@192.168.1.1:3000/database123?authMechanism=SCRAM-SHA-256&authSource=admin`; mongoose.connect(conn_string, { useUnifiedTopology: true }) .then(() => console.log('MongoDB数据库连接成功...')) .catch((err) => console.log(err));
方案2:在Mongoose连接选项中指定认证数据库
如果不想修改连接字符串,可以在connect方法的配置选项中单独指定认证数据库:
const mongoose = require('mongoose'); let conn_string = `mongodb://mongo_uname:mongo_pass@192.168.1.1:3000/database123?authMechanism=SCRAM-SHA-256`; mongoose.connect(conn_string, { useUnifiedTopology: true, authSource: 'admin' // 明确指定用于认证的数据库 }) .then(() => console.log('MongoDB数据库连接成功...')) .catch((err) => console.log(err));
方案3:先连接admin库认证,再切换目标数据库
先通过admin库完成身份认证,再切换到database123,这种方式适合需要同时操作多个数据库的场景:
const mongoose = require('mongoose'); let adminConnString = `mongodb://mongo_uname:mongo_pass@192.168.1.1:3000/admin?authMechanism=SCRAM-SHA-256`; mongoose.connect(adminConnString, { useUnifiedTopology: true }) .then(() => { // 切换到目标数据库database123 const targetDb = mongoose.connection.useDb('database123'); console.log('MongoDB数据库连接并切换成功...'); // 后续数据库操作使用targetDb对象即可 }) .catch((err) => console.log(err));
内容的提问来源于stack exchange,提问作者lhoogenraad
相关产品推荐
相关产品推荐

