如何用单个dashboard用户的不同连接字符串限制MongoDB数据库访问
实现单个用户按连接字符串限制访问指定MongoDB数据库
核心思路
MongoDB支持在不同数据库中创建同名用户,每个用户仅拥有对应数据库的权限。通过连接字符串指定authSource为目标数据库(而非全局的admin),就能让同一个用户名在连接不同库时,自动使用对应库的受限身份,实现单用户名多库隔离访问。
具体操作步骤
删除全局admin库中的dashboard用户(如果存在)
先用超级用户登录到MongoDB的admin库:mongosh "mongodb+srv://admin:ADMIN_PASSWORD@IP_ADDRESS/admin?tls=true&replicaSet=IP_ADDRESS"执行删除命令:
db.dropUser("dashboard")在db_1中创建dashboard用户,仅赋予db_1的权限
切换到db_1库:use db_1创建用户,只分配该库的对应权限(可根据需求调整角色,比如
read只读、readWrite读写):db.createUser({ user: "dashboard", pwd: "MY_PASSWORD", roles: [{ role: "readWrite", db: "db_1" }] })在db_2中创建同名dashboard用户,仅赋予db_2的权限
切换到db_2库:use db_2创建用户,同样只分配对应库的权限:
db.createUser({ user: "dashboard", pwd: "MY_PASSWORD", roles: [{ role: "readWrite", db: "db_2" }] })使用指定连接字符串访问目标库
访问db_1的连接字符串(注意authSource设为db_1,而非admin):mongosh "mongodb+srv://dashboard:MY_PASSWORD@IP_ADDRESS/db_1?tls=true&authSource=db_1&replicaSet=IP_ADDRESS"此时尝试切换到db_2执行操作会触发权限报错,因为当前登录的是db_1的dashboard用户,无db_2的访问权限。
访问db_2的连接字符串同理:
mongosh "mongodb+srv://dashboard:MY_PASSWORD@IP_ADDRESS/db_2?tls=true&authSource=db_2&replicaSet=IP_ADDRESS"
关键注意点
- 必须保证
authSource参数与目标数据库一致,否则会默认去admin库查找用户,导致权限不匹配。 - 各库的dashboard用户密码需保持一致,用户只需记住一套账号密码,通过不同连接字符串切换访问权限。
- 严格按照业务需求分配角色,避免赋予超出必要范围的权限。
内容的提问来源于stack exchange,提问作者Kousha
相关产品推荐
相关产品推荐

