Go Fiber连接MongoDB出现SCRAM-SHA-1认证失败问题求助
解决MongoDB认证失败问题
核心原因
通过MONGO_INITDB_ROOT_USERNAME创建的root账号默认归属admin数据库,而代码中连接URI直接指定scrapping数据库作为认证源,导致MongoDB尝试用scrapping库验证root账号,最终认证失败。
解决方案
方案一:修改连接URI指定认证数据库
在连接字符串末尾添加authSource=admin参数,明确指定使用admin库完成认证:
const mongoURI = "mongodb://root:secret@localhost:27017/scrapping?authSource=admin"
方案二:创建目标数据库专用用户(推荐,遵循最小权限原则)
- 进入MongoDB容器,使用root账号登录:
docker exec -it mongo mongosh -u root -p secret
- 切换到
scrapping数据库:
use scrapping
- 创建拥有该库读写权限的专用用户:
db.createUser({ user: "scrapping_user", pwd: "your_secure_password", roles: [{ role: "readWrite", db: "scrapping" }] })
- 修改代码中的连接URI为专用用户信息:
const mongoURI = "mongodb://scrapping_user:your_secure_password@localhost:27017/scrapping"
额外代码修正
原代码连接逻辑存在顺序错误,client.Connect后未先判断错误就调用client.Database,若连接失败会触发panic,需调整顺序:
err = client.Connect(ctx) // 先判断连接是否成功 if err != nil { return err } // 再获取数据库实例 db := client.Database(dbName)
内容的提问来源于stack exchange,提问作者Farshad
相关产品推荐
相关产品推荐

