开启MongoDB认证后Unifi Controller容器权限报错求助
解决Unifi Controller连接开启认证的MongoDB时的权限错误
问题诊断
从错误日志可知,unifi用户在unifi_stat库上没有执行listCollections命令的权限。核心原因是创建unifi_stat库的用户时,错误配置了unifi库的权限,且未正确赋予unifi_stat库所需的完整权限。
修复步骤
1. 临时关闭MongoDB认证
在Portainer中移除Mongo容器的--auth启动参数,重启Mongo容器,以便无认证连接修改用户权限。
2. 重新配置MongoDB用户权限
连接到MongoDB容器(执行命令:docker exec -it <你的Mongo容器名> mongosh),依次执行以下操作:
删除错误的unifi_stat库用户
use unifi_stat db.dropUser("unifi")
重新创建unifi库用户(确保权限简洁正确)
use unifi db.createUser({ user: "unifi", pwd: "12345678", roles: [ { role: "dbOwner", db: "unifi" } // dbOwner角色已包含readWrite、userAdmin及集合列表权限 ] });
创建正确的unifi_stat库用户
use unifi_stat db.createUser({ user: "unifi", pwd: "12345678", roles: [ { role: "dbOwner", db: "unifi_stat" } // 直接赋予dbOwner角色,覆盖所有必要操作权限 ] });
3. 重启MongoDB并开启认证
在Portainer中为Mongo容器重新添加--auth启动参数,重启容器。
4. 修正Docker Compose环境变量
建议统一使用admin库作为认证源,避免多库认证冲突,修改环境变量如下:
environment: DB_URI: mongodb://unifi:12345678@test_mongo/unifi?authSource=admin STATDB_URI: mongodb://unifi:12345678@test_mongo/unifi_stat?authSource=admin DB_NAME: unifi
5. 重启Unifi Controller容器
重启Unifi Controller容器,观察日志是否仍存在权限错误。
关键说明
dbOwner角色已包含readWrite、userAdmin以及执行listCollections所需的权限,无需单独添加重复或跨库的角色配置。- 使用
authSource=admin可让用户通过admin库的统一认证机制访问目标数据库,减少多库用户配置的混乱。
内容的提问来源于stack exchange,提问作者Sandro Buturishvili
相关产品推荐
相关产品推荐

