Docker部署MongoDB连接报错:未授权执行数据库命令
解决MongoDB未授权访问test数据库的问题
问题原因
错误提示MongoServerError: not authorized on test to execute command,核心原因是你使用的athul是MongoDB的root用户,该用户默认仅在admin数据库拥有最高权限,直接访问test数据库时会被权限系统拒绝。
解决方案
方案1:修改连接字符串指定认证数据库
在mongoose连接URL后添加?authSource=admin,让MongoDB使用admin数据库完成身份验证,验证通过后即可正常访问test数据库:
const connect=()=>{ mongoose.connect(`mongodb://athul:athul@mongodb-server:27017/test?authSource=admin`).then(() => { console.log("connected to db"); }) .catch((err) => { console.log("not connected to db", err); }); }
方案2:创建test数据库专用用户(更安全)
如果不想用root用户操作业务数据库,建议创建仅拥有test数据库权限的专用用户:
- 进入MongoDB容器终端:
docker exec -it mongodb-server mongosh -u athul -p athul --authenticationDatabase admin
- 切换到
test数据库:
use test
- 创建具备读写权限的用户:
db.createUser({ user: "test_app_user", pwd: "your_secure_password", roles: [{ role: "readWrite", db: "test" }] })
- 更新连接字符串使用新用户:
const connect=()=>{ mongoose.connect(`mongodb://test_app_user:your_secure_password@mongodb-server:27017/test`).then(() => { console.log("connected to db"); }) .catch((err) => { console.log("not connected to db", err); }); }
内容的提问来源于stack exchange,提问作者ATHUL SURESH
相关产品推荐
相关产品推荐

