写在前面:数据库安全是企业级应用的重中之重,MongoDB提供了完善的安全机制,包括用户认证、角色授权、加密连接等。本篇将详细介绍MongoDB的安全配置和管理,帮助您构建安全的数据库环境。
文章目录
-
- 一、MongoDB安全概述
-
- [1.1 安全体系架构](#1.1 安全体系架构)
- [1.2 安全检查清单](#1.2 安全检查清单)
- 二、用户认证
-
- [2.1 认证方式](#2.1 认证方式)
- [2.2 创建用户](#2.2 创建用户)
- [2.3 启用认证](#2.3 启用认证)
- 三、角色与权限
-
- [3.1 内置角色](#3.1 内置角色)
- [3.2 角色详情](#3.2 角色详情)
- [3.3 自定义角色](#3.3 自定义角色)
- [3.4 用户管理](#3.4 用户管理)
- 四、网络安全
-
- [4.1 绑定IP配置](#4.1 绑定IP配置)
- [4.2 防火墙配置](#4.2 防火墙配置)
- [4.3 VPC网络隔离](#4.3 VPC网络隔离)
- 五、SSL/TLS加密
-
- [5.1 生成证书](#5.1 生成证书)
- [5.2 启用SSL](#5.2 启用SSL)
- [5.3 客户端连接](#5.3 客户端连接)
- 六、审计日志
-
- [6.1 启用审计](#6.1 启用审计)
- [6.2 审计操作类型](#6.2 审计操作类型)
- 七、数据加密
-
- [7.1 静态加密](#7.1 静态加密)
- [7.2 字段级加密](#7.2 字段级加密)
- 八、备份安全
-
- [8.1 加密备份](#8.1 加密备份)
- [8.2 安全存储备份](#8.2 安全存储备份)
- 九、生产环境安全配置
-
- [9.1 完整配置示例](#9.1 完整配置示例)
- [9.2 安全检查脚本](#9.2 安全检查脚本)
- 十、总结
一、MongoDB安全概述
1.1 安全体系架构
🔐 MongoDB安全层次:
┌─────────────────────────────────────────┐
│ 网络层安全 │
│ 防火墙、IP白名单、网络隔离 │
├─────────────────────────────────────────┤
│ 传输层安全 │
│ TLS/SSL加密连接 │
├─────────────────────────────────────────┤
│ 认证授权 │
│ 用户、角色、权限管理 │
├─────────────────────────────────────────┤
│ 数据层安全 │
│ 加密存储、审计日志 │
└─────────────────────────────────────────┘
1.2 安全检查清单
✅ MongoDB安全清单:
□ 启用认证
□ 使用强密码
□ 限制网络访问
□ 启用SSL/TLS
□ 最小权限原则
□ 定期备份
□ 启用审计
□ 监控访问日志
二、用户认证
2.1 认证方式
🔑 MongoDB认证方式:
1. SCR-SHA-256(默认,推荐)
- 强安全性
- 支持密码过期
2. SCR-SHA-1
- 兼容旧版本
3. MONGODB-CR(已废弃)
- 不建议使用
2.2 创建用户
javascript
// 连接到MongoDB(先不启用认证)
mongosh
// 切换到admin数据库
use admin
// 创建管理员用户(root角色)
db.createUser({
user: "admin",
pwd: "your_secure_password",
roles: [
{ role: "root", db: "admin" }
]
})
// 创建应用用户(特定数据库权限)
use myapp
db.createUser({
user: "myapp_user",
pwd: "your_app_password",
roles: [
{ role: "readWrite", db: "myapp" },
{ role: "read", db: "config" },
{ role: "read", db: "admin" }
]
})
// 验证用户
db.auth("admin", "your_secure_password")
2.3 启用认证
yaml
# mongod.conf
security:
authorization: enabled # 启用认证
# 或者使用keyFile(副本集/分片集群)
keyFile: /data/mongodb/keyFile
bash
# 重启MongoDB
systemctl restart mongod
# 连接时指定用户
mongosh -u admin -p your_secure_password --authenticationDatabase admin
三、角色与权限
3.1 内置角色
👥 MongoDB内置角色:
数据库角色:
- read:读取所有非系统集合
- readWrite:读写所有非系统集合
- dbAdmin:管理数据库(创建/删除集合/索引)
- userAdmin:管理用户
- dbOwner:readWrite + dbAdmin + userAdmin
集群角色:
- clusterAdmin:管理集群
- clusterMonitor:监控集群
- hostManager:管理服务器
超级角色:
- root:所有权限
3.2 角色详情
javascript
// 查看角色权限
db.adminCommand({ rolesInfo: "readWrite", showPrivileges: true })
// 查看所有内置角色
db.adminCommand({ rolesInfo: 1 })
3.3 自定义角色
javascript
// 创建自定义角色
db.adminCommand({
createRole: "myCustomRole",
privileges: [
{
resource: { db: "myapp", collection: "orders" },
actions: ["find", "insert", "update"]
},
{
resource: { db: "myapp", collection: "products" },
actions: ["find"]
}
],
roles: [] // 继承的角色
})
// 为用户分配自定义角色
db.grantRolesToUser("myapp_user", ["myCustomRole"])
3.4 用户管理
javascript
// 查看所有用户
db.getUsers()
// 修改用户密码
db.changeUserPassword("myapp_user", "new_password")
// 更新用户角色
db.grantRolesToUser("myapp_user", ["readWrite"])
db.revokeRolesFromUser("myapp_user", ["read"])
删除用户
db.dropUser("myapp_user")
四、网络安全
4.1 绑定IP配置
yaml
# mongod.conf
net:
port: 27017
bindIp: 127.0.0.1,192.168.1.10 # 只绑定特定IP
# bindIpAll: true # 绑定所有网卡(谨慎)
4.2 防火墙配置
bash
# Linux防火墙(iptables)
# 只允许应用服务器访问
iptables -A INPUT -p tcp --dport 27017 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 27017 -j DROP
# 或者使用firewalld
firewall-cmd --permanent --add-source=192.168.1.0/24 --port=27017/tcp
firewall-cmd --reload
4.3 VPC网络隔离
🏠 云环境网络隔离:
1. 使用VPC
- MongoDB部署在私有网络
- 只通过内网IP访问
2. 安全组/ACL
- 只开放必要端口
- 限制源IP
3. 专线/VPN
- 跨云/跨区域通信加密
五、SSL/TLS加密
5.1 生成证书
bash
# 生成自签名证书(测试环境)
openssl req -newkey rsa:2048 -new -x509 -days 365 -nodes \
-out /etc/ssl/mongodb-server.crt \
-keyout /etc/ssl/mongodb-server.key \
-subj "/C=CN/ST=Beijing/L=Beijing/O=MongoDB/OU=Dev/CN=mongodb"
# 合并为PEM文件
cat /etc/ssl/mongodb-server.crt /etc/ssl/mongodb-server.key \
> /etc/ssl/mongodb.pem
5.2 启用SSL
yaml
# mongod.conf
net:
port: 27017
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongodb.pem
CAFile: /etc/ssl/ca.crt
5.3 客户端连接
bash
# 使用SSL连接
mongosh --ssl --sslPEMKeyFile /etc/ssl/client.pem \
--sslCAFile /etc/ssl/ca.crt \
mongodb://192.168.1.10:27017
六、审计日志
6.1 启用审计
yaml
# mongod.conf
auditLog:
destination: file
path: /var/log/mongodb/audit.log
format: JSON
filter: '{ atype: { $in: ["createCollection", "dropCollection"] } }'
6.2 审计操作类型
📝 可审计的操作:
认证相关:
- authenticate
- logout
- authCheck
DDL操作:
- createCollection
- dropCollection
- createIndex
- dropIndex
用户管理:
- createUser
- dropUser
- grantRole
- revokeRole
数据操作:
- delete
- insert
- update
七、数据加密
7.1 静态加密
yaml
# mongod.conf
storage:
dbPath: /data/db
engine: wiredTiger
encryption:
enabled: true
keyFile: /data/db/mongodb-key
7.2 字段级加密
javascript
// MongoDB 4.2+ 支持客户端字段级加密
const { MongoClient } = require('mongodb');
const { ClientEncryption } = require('mongodb-client-encryption');
const client = new MongoClient('mongodb://localhost:27017', {
autoEncryption: {
keyVaultNamespace: 'encryption.__keyVault',
kmsProviders: {
local: { key: Buffer.from('your-32-byte-base64-key', 'base64') }
}
}
});
八、备份安全
8.1 加密备份
bash
# 使用mongodump备份(传输加密)
mongodump --uri="mongodb://user:pass@host:27017/db" \
--gzip --out /backup/
# 加密备份文件
gpg -c /backup/db/collections.json
8.2 安全存储备份
💾 备份安全建议:
1. 加密存储
- 备份文件加密存储
- 安全保管密钥
2. 限制访问
- 备份目录权限600
- 专人管理
3. 异地存储
- 定期copy到远程
- 考虑云对象存储
九、生产环境安全配置
9.1 完整配置示例
yaml
# mongod.conf - 生产环境
storage:
dbPath: /data/db
journal:
enabled: true
engine: wiredTiger
encryption:
enabled: true
keyFile: /data/db/mongodb-key
systemLog:
destination: file
path: /var/log/mongodb/mongod.log
logAppend: true
net:
port: 27017
bindIp: 127.0.0.1,192.168.1.10
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongodb.pem
CAFile: /etc/ssl/ca.crt
security:
authorization: enabled
keyFile: /data/db/keyFile
auditLog:
destination: file
path: /var/log/mongodb/audit.log
format: JSON
9.2 安全检查脚本
javascript
// 安全检查脚本
db.adminCommand({ connectionStatus: 1 }).authInfo.authenticatedUsers.forEach(user => {
print("User: " + user.user + " DB: " + user.db);
});
// 检查未授权访问
db.getSiblingDB("admin").system.profile.find({}).pretty();
十、总结
📊 本篇总结:
✅ 掌握内容:
- MongoDB安全体系架构
- 用户认证(SCR-SHA-256)
- 角色与权限管理
- 网络安全配置
- SSL/TLS加密连接
- 审计日志配置
- 数据加密
- 备份安全
- 生产环境完整配置
作者 :刘~浪地球
更新时间 :2026-05-11
本文声明:原创不易,转载需授权!