🔒 一、MongoDB 安全性方案
1. 开启身份认证
-
默认情况下,MongoDB 可能 无密码开放访问(特别是旧版本)。
-
必须开启
auth
并创建用户:
创建管理员用户:
2. 角色最小化原则(RBAC)
-
为不同应用用户分配最小权限,比如:
-
业务应用不要使用
admin
用户。
3. 网络安全
-
限制 IP 访问:
bindIp
配置只允许指定服务器访问。 -
开启防火墙/安全组,只允许业务服务器访问 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 自动清理。
-
避免过大索引:如果集合字段过多,不要滥用
$**
通配符索引。
2. 查询优化
-
使用
explain()
分析查询计划: -
避免全表扫描。
-
尽量避免
$regex
前缀模糊匹配(可以结合 text 索引或 Elasticsearch)。 -
大数据分页使用 游标 + range 查询,避免
skip
大量数据:
3. 数据模型优化
-
热数据小文档:文档不要太大(推荐 < 16MB)。
-
避免深层嵌套数组:数组太大或嵌套太深会导致索引失效。
-
冷热数据分离:频繁查询的数据放一个集合,历史数据归档。
4. 复制集与分片
-
复制集(Replica Set)
-
提供高可用和读写分离(Primary/Secondary)。
-
Secondary 节点可用于只读查询、备份。
-
-
分片(Sharding)
-
解决超大数据集和高并发写入问题。
-
Shard key 选择非常关键(要高基数、均匀分布)。
-
5. 资源与系统优化
-
内存:MongoDB 使用 WiredTiger 引擎,强依赖内存(推荐物理内存 ≈ 数据热集大小)。
-
存储引擎:使用 WiredTiger(默认),启用压缩(节省磁盘)。
-
连接池:应用端使用连接池,避免频繁新建连接。
-
操作系统参数:
-
ulimit -n
设置更高文件句柄数。 -
磁盘使用 SSD,提高随机 IO 性能。
-
✅ 总结
MongoDB 安全与优化的关键点:
-
安全 → 开启认证、最小化权限、TLS 加密、限制 IP、审计日志。
-
性能 → 索引优化、查询优化、合理的数据模型、复制集和分片、系统参数调优。
-
设计层面 → 避免超大文档、深层数组,冷热数据分离,结合业务需求做 Schema 设计。