🔒 一、MongoDB 安全性方案

1. 开启身份认证

  • 默认情况下,MongoDB 可能 无密码开放访问(特别是旧版本)。

  • 必须开启 auth 并创建用户:

mongod --auth --port 27017 --dbpath /var/lib/mongo --bind_ip 127.0.0.1

创建管理员用户:

use admin db.createUser({ user: "admin", pwd: "StrongPassword123", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] })

2. 角色最小化原则(RBAC)

  • 为不同应用用户分配最小权限,比如:

db.createUser({ user: "appUser", pwd: "AppPwd123", roles: [ { role: "readWrite", db: "mydb" } ] })
  • 业务应用不要使用 admin 用户。

3. 网络安全

  • 限制 IP 访问bindIp 配置只允许指定服务器访问。

    net: bindIp: 127.0.0.1,192.168.1.100
  • 开启防火墙/安全组,只允许业务服务器访问 MongoDB 端口。

  • 启用 TLS/SSL,保护传输层安全。

4. 数据加密

  • 静态加密:启用 Encryption at Rest(MongoDB Enterprise 提供,社区版可用文件系统加密)。

  • 传输加密:启用 TLS。

  • 敏感字段加密:可使用 MongoDB 4.2+ 的 字段级加密(Client-Side Field Level Encryption)

5. 审计与监控

  • 开启 MongoDB 审计日志(Enterprise 版)。

  • 社区版可以通过 mongod 日志 + MongoDB Ops Manager / Prometheus + Grafana 监控访问行为。


⚡ 二、MongoDB 性能优化方案

1. 索引优化

  • 单字段索引:常用查询字段必须有索引。

  • 复合索引:频繁使用多个字段查询时,考虑建立复合索引。

  • TTL 索引:对于过期数据(如 session、日志),使用 TTL 自动清理。

    db.sessions.createIndex({ "createdAt": 1 }, { expireAfterSeconds: 3600 })
  • 避免过大索引:如果集合字段过多,不要滥用 $** 通配符索引。

2. 查询优化

  • 使用 explain() 分析查询计划:

    db.users.find({ age: 20 }).explain("executionStats")
  • 避免全表扫描。

  • 尽量避免 $regex 前缀模糊匹配(可以结合 text 索引或 Elasticsearch)。

  • 大数据分页使用 游标 + range 查询,避免 skip 大量数据:

    db.orders.find({ _id: { $gt: lastId } }).limit(20)

3. 数据模型优化

  • 热数据小文档:文档不要太大(推荐 < 16MB)。

  • 避免深层嵌套数组:数组太大或嵌套太深会导致索引失效。

  • 冷热数据分离:频繁查询的数据放一个集合,历史数据归档。

4. 复制集与分片

  • 复制集(Replica Set)

    • 提供高可用和读写分离(Primary/Secondary)。

    • Secondary 节点可用于只读查询、备份。

  • 分片(Sharding)

    • 解决超大数据集和高并发写入问题。

    • Shard key 选择非常关键(要高基数、均匀分布)。

5. 资源与系统优化

  • 内存:MongoDB 使用 WiredTiger 引擎,强依赖内存(推荐物理内存 ≈ 数据热集大小)。

  • 存储引擎:使用 WiredTiger(默认),启用压缩(节省磁盘)。

  • 连接池:应用端使用连接池,避免频繁新建连接。

  • 操作系统参数

    • ulimit -n 设置更高文件句柄数。

    • 磁盘使用 SSD,提高随机 IO 性能。


✅ 总结

MongoDB 安全与优化的关键点:

  1. 安全 → 开启认证、最小化权限、TLS 加密、限制 IP、审计日志。

  2. 性能 → 索引优化、查询优化、合理的数据模型、复制集和分片、系统参数调优。

  3. 设计层面 → 避免超大文档、深层数组,冷热数据分离,结合业务需求做 Schema 设计。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部