MongoDB安全管理技能Skill mongodb-security-admin

本技能专注于MongoDB数据库的安全管理与实践,涵盖认证设置、基于角色的授权、TLS/SSL加密配置、审计日志和备份恢复,适用于生产环境部署、用户管理、合规实施和灾难恢复。关键词:MongoDB安全、认证授权、加密备份、审计合规、数据库管理、网络安全、运维实践。

身份认证 0 次安装 0 次浏览 更新于 3/14/2026

名称: mongodb-security-admin 版本: “2.1.0” 描述: 掌握MongoDB安全、认证、授权、加密和备份。学习基于角色的访问控制、TLS/SSL、加密和灾难恢复。用于安全部署、管理用户或实施合规。 sasmp版本: “1.3.0” 绑定代理: 06-mongodb-security-administration 绑定类型: PRIMARY_BOND

生产级技能配置

能力:

  • 认证设置
  • 授权-rbac
  • 加密配置
  • TLS配置
  • 审计日志
  • 备份恢复

输入验证: 必需上下文: - 安全域 - 环境 可选上下文: - 合规框架 - 现有配置 - 威胁模型

输出格式: 配置: 对象 实施步骤: 数组 验证命令: 数组 安全检查清单: 数组

错误处理: 常见错误: - 代码: SEC001 条件: “认证失败” 恢复: “验证凭据,检查authSource,确认用户存在” - 代码: SEC002 条件: “TLS握手失败” 恢复: “验证证书有效性,检查CA链,确认加密套件支持” - 代码: SEC003 条件: “授权被拒” 恢复: “检查用户角色,验证数据库权限,审查RBAC配置”

先决条件: mongodb版本: “4.0+” 必需知识: - 用户管理 - 网络基础 安全要求: - “访问mongod配置” - “证书管理能力”

测试: 单元测试模板: | // 验证认证工作 const client = new MongoClient(uri, { auth: { username, password } }) await client.connect() const adminDb = client.db(‘admin’) const result = await adminDb.command({ connectionStatus: 1 }) expect(result.authInfo.authenticatedUsers).toHaveLength(1)

MongoDB安全与管理

掌握MongoDB安全和操作实践。

快速开始

启用认证

# 启用认证前创建管理员用户
mongod --dbpath /data --logpath /var/log/mongod.log

mongo
> use admin
> db.createUser({
    user: 'admin',
    pwd: 'securepassword',
    roles: ['root']
  })

# 启用认证后重启
mongod --auth --dbpath /data

认证

// 使用凭据连接
const client = new MongoClient(
  'mongodb://admin:password@localhost:27017/?authSource=admin'
);

// 创建应用程序用户
db.createUser({
  user: 'appuser',
  pwd: 'apppassword',
  roles: ['readWrite']
})

授权 (RBAC)

// 内置角色
/*
管理员角色:
  - root: 完全访问
  - dbAdmin: 数据库管理
  - userAdmin: 用户管理

数据库角色:
  - read: 只读访问
  - readWrite: 读写访问

集群角色:
  - clusterAdmin: 完全集群访问
  - clusterManager: 集群监控
  - clusterMonitor: 只读监控
*/

// 创建具有特定角色的用户
db.createUser({
  user: 'analyst',
  pwd: 'password',
  roles: [{ role: 'read', db: 'analytics' }]
})

// 授予多个角色
db.grantRolesToUser('analyst', [
  { role: 'read', db: 'db1' },
  { role: 'readWrite', db: 'db2' }
])

自定义角色

// 创建自定义角色
db.createRole({
  role: 'reportViewer',
  privileges: [
    {
      resource: { db: 'analytics', collection: 'reports' },
      actions: ['find']
    }
  ],
  roles: []
})

// 分配自定义角色
db.grantRolesToUser('analyst', [
  { role: 'reportViewer', db: 'admin' }
])

加密

TLS/SSL设置

# 生成自签名证书
openssl req -newkey rsa:2048 -new -x509 -days 365 -nodes \
  -out server.crt -keyout server.key
cat server.crt server.key > server.pem

# 启动MongoDB并启用TLS
mongod --tlsMode requireTLS \
  --tlsCertificateKeyFile /path/to/server.pem \
  --dbpath /data

# 使用TLS连接
mongo --tls --tlsCertificateKeyFile /path/to/client.pem \
  mongodb://localhost:27017

静态加密

# 使用WiredTiger启用加密
mongod --encryptionCipherMode AES256-CBC \
  --encryptionKeyFile /path/to/keyfile.key \
  --dbpath /data

备份与恢复

备份方法

# 使用mongodump备份
mongodump --out /backup/`date +%Y%m%d`

# 备份特定数据库
mongodump --db myapp --out /backup/myapp

# 压缩备份
mongodump --archive=backup.archive --gzip

# 恢复
mongorestore /backup/
mongorestore --archive=backup.archive --gzip

使用快照进行时间点恢复

# 快照策略
# 1. 在副本次要节点上创建文件系统快照
# 2. 停止mongod
# 3. 将快照复制到备份
# 4. 重启mongod
# 5. 使用oplog进行时间点恢复

# 从快照恢复
# 1. 恢复文件系统快照
# 2. 启动mongod(自动恢复)
# 3. 验证数据完整性

审计日志

// 启用审计日志
// mongod --auditLog.destination file \
//   --auditLog.format BSON \
//   --auditLog.path /var/log/mongodb/audit.log

// 查看审计日志
db.adminCommand({
  getParameter: 1,
  auditLog: 1
})

// 配置审计过滤器
// --auditLog.filter '{ atype: "authenticate" }'

用户管理

// 列出用户
db.getUsers()

// 修改用户密码
db.changeUserPassword('username', 'newpassword')

// 移除用户
db.removeUser('username')

// 检查当前用户
db.runCommand({ connectionStatus: 1 })

Python示例

from pymongo import MongoClient
from pymongo.auth_mechanisms import MECHANISMS

# 使用认证连接
client = MongoClient(
    'mongodb://user:password@localhost:27017/?authSource=admin'
)

# 创建用户
db = client['admin']
db.command('createUser', 'newuser',
    pwd='password',
    roles=['readWrite']
)

# 检查权限
db.command('usersInfo', 'newuser')

安全检查清单

✅ 在生产环境中启用认证 ✅ 使用强密码 ✅ 实施基于角色的访问控制 ✅ 启用TLS/SSL连接加密 ✅ 启用静态加密 ✅ 实施审计日志 ✅ 定期测试备份 ✅ 网络隔离(防火墙) ✅ IP白名单 ✅ 最小权限原则 ✅ 监控访问日志 ✅ 保持MongoDB更新