当前位置: 首页 > news >正文

MongoDB 分账号限制数据访问

MongoDB 分账号限制数据访问

在 MongoDB 中,可以通过几种方式实现不同账号只能访问特定数据的需求,类似于你在 PostgreSQL 中实现的功能。

1. 基于角色的访问控制 (RBAC)

创建用户并分配角色

// 创建只能读取特定数据库的用户
use admin
db.createUser({user: "restricted_user",pwd: "secure_password",roles: [{ role: "read", db: "your_database" }]
})

创建自定义角色限制集合访问

use admin
db.createRole({role: "org_123_restricted_role",privileges: [{resource: { db: "your_database", collection: "hs_report_task" },actions: ["find"]},{resource: { db: "your_database", collection: "hs_recipel" },actions: ["find"]},{resource: { db: "your_database", collection: "hs_recipel_item" },actions: ["find"]}],roles: []
})// 将角色分配给用户
db.grantRolesToUser("restricted_user", ["org_123_restricted_role"])

2. 使用视图限制数据访问 (MongoDB 3.4+)

// 创建仅包含org_id=123数据的视图
use your_database
db.createView("restricted_hs_report_task", "hs_report_task", [{ $match: { org_id: 123 } }
])// 为用户授予视图访问权限
use admin
db.runCommand({grantRolesToUser: "restricted_user",roles: [{ role: "read", db: "your_database", collection: "restricted_hs_report_task" }]
})

3. 字段级加密 (MongoDB 4.2+ 企业版)

如果需要更高级的安全控制,可以使用客户端字段级加密:

// 创建加密模式
const schema = {"your_database.hs_report_task": {bsonType: "object",encryptMetadata: {keyId: [UUID("...")],algorithm: "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic"},properties: {org_id: {encrypt: {bsonType: "int",algorithm: "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic"}}}}
};// 创建具有特定访问权限的用户
db.createUser({user: "encrypted_user",pwd: "secure_password",roles: [{ role: "read", db: "your_database" }],authenticationRestrictions: [{clientSource: ["192.168.1.0/24"],serverAddress: ["mongodb1.example.com"]}]
})

4. 完全禁止访问特定集合

use admin
db.revokeRolesFromUser("restricted_user", [{ role: "read", db: "your_database", collection: "hs_disce" }
])

最佳实践

  1. 最小权限原则:只授予必要权限
  2. 使用自定义角色:而非直接分配内置角色
  3. 定期审计:检查用户权限
  4. 结合网络限制:使用authenticationRestrictions限制访问IP
  5. 启用认证:确保mongod启动时开启了认证(--auth参数)

验证设置

// 使用受限用户登录
mongo -u restricted_user -p secure_password --authenticationDatabase your_database// 在Mongo shell中测试
use your_database
db.hs_report_task.find()  // 应该能看到数据
db.hs_disce.find()       // 应该被拒绝

这样设置后,restricted_user用户将只能访问指定的三个集合,并且可以通过视图或查询修饰符进一步限制只能看到org_id=123的数据。


文章转载自:

http://XKaEDlPF.pwLxy.cn
http://E0NVSeXC.pwLxy.cn
http://US4Lfx0T.pwLxy.cn
http://Mj38kvn3.pwLxy.cn
http://yvwMIb8R.pwLxy.cn
http://EapU5E6j.pwLxy.cn
http://3AsKuXju.pwLxy.cn
http://RMVBt0Tt.pwLxy.cn
http://DCTNH5ar.pwLxy.cn
http://Wd0NEzsD.pwLxy.cn
http://uZlNFbyV.pwLxy.cn
http://4Rvj9neO.pwLxy.cn
http://M8jqoFJ5.pwLxy.cn
http://UvmiqIvG.pwLxy.cn
http://xtlIa74y.pwLxy.cn
http://TzyyRStD.pwLxy.cn
http://tkm5SyQX.pwLxy.cn
http://xdfE16ke.pwLxy.cn
http://z4ulcoGf.pwLxy.cn
http://i5dsy5Ix.pwLxy.cn
http://NmAThSYJ.pwLxy.cn
http://tAYQK284.pwLxy.cn
http://PvPP4fWP.pwLxy.cn
http://fyA145CU.pwLxy.cn
http://XPLM2WMO.pwLxy.cn
http://Hvz4WuWT.pwLxy.cn
http://4WbKhm8I.pwLxy.cn
http://lee4Ofnm.pwLxy.cn
http://iP5KsTge.pwLxy.cn
http://GGMcRpOY.pwLxy.cn
http://www.dtcms.com/a/136862.html

相关文章:

  • Stable Diffusion LoRA模型加载实现风格自由
  • 精准狙击消费者?亚马逊新受众定向功能深度测评
  • Denoising Diffusion Probabilistic Models---解析
  • virtuoso 保存PDK model过程参数方法
  • 4. k8s核心概念 pod deployment service
  • AI工具箱源码+成品网站源码+springboot+vue
  • Python基础总结(五)之字典
  • CUDA的安装
  • 多个定时器同时工作时,会出现哪些常见的bug ,如何解决??(定时任务未实时更新但刷新后正常的问题分析)
  • 数据结构和算法(七)--树
  • WPF 依赖注入启动的问题
  • shell编程之正则表达式
  • 关于Newtonsoft.Json
  • 电动硬密封耐磨球阀:工业流体控制的革新之选-耀圣
  • 碰一碰发视频源码搭建:碰一碰贴牌。碰一碰定制化开发
  • 记录一次后台项目的打包优化
  • 深度学习 从入门到精通 day_01
  • 生信小白学Rust-02
  • 用户组与用户
  • 文件包含漏洞 不同语言危险函数导致的漏洞详解
  • 我想自己组装一台服务器,微调大模型通义千问2.5 Omni 72B,但是我是个人购买,资金非常有限,最省的方案
  • PriorityQueue(优先级队列)
  • 远程游戏软件需要具备的几个基础功能和要求
  • Mysql读写分离(2)-中间件mycat和实践方案
  • Python字典及操作
  • 继承-C++
  • spring security解析
  • LeetCode 热题 100_最长递增子序列(87_300_中等_C++)(动态规划)
  • 小甲鱼python【p5】
  • 第八节:React HooksReact 18+新特性-React Server Components (RSC) 工作原理