从C#客户端连接MongoDB时出现认证错误求助
MongoDB认证失败问题解决
问题详情
使用如下docker-compose.yml部署MongoDB及Mongo-Express:
mongo: container_name: Mongo image: mongo environment: - MONGO_INITDB_ROOT_USERNAME=user - MONGO_INITDB_ROOT_PASSWORD=password - MONGO_INITDB_DATABASE=admin ports: - 27017:27017 mongo-express: image: mongo-express container_name: MongoExpress environment: - ME_CONFIG_MONGODB_ENABLE_ADMIN=true - ME_CONFIG_MONGODB_ADMINUSERNAME=user - ME_CONFIG_MONGODB_ADMINPASSWORD=password - ME_CONFIG_MONGODB_SERVER=mongo links: - mongo ports: - 8081:8081
使用连接字符串 mongodb://user:password@127.0.0.1:27017 连接时,触发认证错误:
MongoDB.Driver.MongoAuthenticationException: Unable to authenticate using sasl protocol mechanism SCRAM-SHA-1.
---> MongoDB.Driver.MongoCommandException: Command saslStart failed: Authentication failed..
解决步骤
1. 修正连接字符串,指定认证数据库
MongoDB的root用户默认创建在admin数据库下,连接时必须明确指定认证源。将连接字符串修改为:
mongodb://user:password@127.0.0.1:27017/?authSource=admin
2. 清理残留的容器数据(若上述方法无效)
如果之前启动过Mongo容器,可能存在旧的认证缓存或数据,需要彻底清理后重新部署:
- 停止并删除现有容器:
docker-compose down - 删除MongoDB关联的数据卷(此操作会清除所有数据库数据,确认无重要数据再执行):
docker volume rm $(docker volume ls -q | grep mongo) - 重新启动服务:
docker-compose up -d
3. 验证Mongo-Express的连通性
先通过Mongo-Express确认MongoDB的用户配置正常:
访问 http://127.0.0.1:8081,使用配置的user和password登录。若能成功进入,说明MongoDB的用户认证本身无问题,问题仅出在客户端连接字符串的配置。
4. 强制指定认证机制(针对驱动兼容性问题)
部分旧版本MongoDB驱动可能不兼容容器内MongoDB默认的SCRAM-SHA-256机制,可在docker-compose.yml的mongo服务中添加环境变量强制使用SCRAM-SHA-1:
mongo: container_name: Mongo image: mongo environment: - MONGO_INITDB_ROOT_USERNAME=user - MONGO_INITDB_ROOT_PASSWORD=password - MONGO_INITDB_DATABASE=admin - MONGO_AUTH_MECHANISM=SCRAM-SHA-1 # 添加此行 ports: - 27017:27017
修改后重启容器即可。
内容的提问来源于stack exchange,提问作者Jaczura Zoltán
相关产品推荐
相关产品推荐

