1. 首页 > MongoDB教程 > 正文

MongoDB教程FG005-MongoDB权限认证与安全配置实战

本文档风哥主要介绍MongoDB权限认证与安全配置,包括MongoDB安全基础概念、认证机制、授权机制、安全规划、认证规划、授权规划、启用认证、用户创建与管理、角色管理、认证实战案例、授权实战案例、安全加固实战等内容,风哥教程参考MongoDB官方文档Security内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 MongoDB安全基础概念

MongoDB的安全包括认证、授权、加密、审计等多个方面。在生产环境中,确保MongoDB的安全性是非常重要的。更多视频教程www.fgedu.net.cn

MongoDB安全相关概念:

  • 认证(Authentication):验证用户身份的过程
  • 授权(Authorization):控制用户对资源的访问权限
  • 加密(Encryption):保护数据传输和存储安全
  • 审计(Auditing):记录用户操作行为
  • 网络安全:限制网络访问,防止未授权访问

1.2 MongoDB认证机制

MongoDB支持多种认证机制,用于验证用户身份:

# MongoDB认证机制

## 内置认证机制
– **SCRAM(Default):** Salted Challenge Response Authentication Mechanism
– **x.509证书认证:** 使用SSL/TLS证书进行认证
– **LDAP认证:** 通过LDAP服务器进行认证
– **Kerberos认证:** 使用Kerberos进行认证

## 认证数据库
– **admin数据库:** 存储用户信息和角色定义
– **local数据库:** 存储副本集和分片集群的元数据
– **自定义数据库:** 可以在特定数据库中创建用户

## 认证流程
1. 用户提供用户名和密码
2. MongoDB验证用户身份
3. 生成认证令牌
4. 用户使用令牌访问数据库

1.3 MongoDB授权机制

MongoDB使用基于角色的访问控制(RBAC)进行授权:

# MongoDB授权机制

## 内置角色
– **数据库用户角色:** read, readWrite
– **数据库管理角色:** dbAdmin, dbOwner, userAdmin
– **集群管理角色:** clusterAdmin, clusterManager, clusterMonitor, hostManager
– **备份恢复角色:** backup, restore
– **超级用户角色:** root
– **内部角色:** __system

## 自定义角色
– 基于内置角色创建
– 定义特定的权限
– 应用于特定的数据库

## 权限类型
– **集合级权限:** 对集合的操作权限
– **数据库级权限:** 对数据库的操作权限
– **集群级权限:** 对集群的操作权限
– **系统级权限:** 对系统的操作权限

风哥提示:MongoDB的安全机制是多层的,需要综合使用认证、授权、加密和审计等多种手段来确保系统的安全性。学习交流加群风哥微信: itpux-com

Part02-生产环境规划与建议

2.1 MongoDB安全规划

在生产环境中,需要进行全面的安全规划:

# 安全规划

## 网络安全
– 限制绑定IP地址
– 使用防火墙限制访问
– 启用SSL/TLS加密传输
– 配置网络隔离

## 认证规划
– 启用认证
– 使用强密码策略
– 定期更新密码
– 使用x.509证书(可选)

## 授权规划
– 最小权限原则
– 基于角色的访问控制
– 定期审查权限
– 分离职责

## 审计规划
– 启用审计日志
– 配置审计过滤器
– 定期检查审计日志
– 存储审计日志

## 加密规划
– 传输加密(SSL/TLS)
– 静态加密(可选)
– 密钥管理
– 证书管理

2.2 MongoDB认证规划

MongoDB认证规划的建议:

# 认证规划

## 认证机制选择
– **SCRAM:** 默认认证机制,适用于大多数场景
– **x.509:** 适用于需要更高安全性的场景
– **LDAP:** 适用于企业内部已有LDAP系统的场景
– **Kerberos:** 适用于企业内部已有Kerberos系统的场景

## 用户管理
– 创建管理员用户
– 创建应用程序用户
– 创建只读用户
– 创建监控用户

## 密码策略
– 使用强密码
– 定期更新密码
– 密码长度至少8位
– 包含大小写字母、数字和特殊字符

## 认证数据库
– 管理员用户:admin数据库
– 应用程序用户:对应业务数据库
– 监控用户:admin数据库

2.3 MongoDB授权规划

MongoDB授权规划的建议:

# 授权规划

## 角色规划
– **超级管理员:** root角色
– **数据库管理员:** dbAdminAnyDatabase角色
– **安全管理员:** userAdminAnyDatabase角色
– **备份管理员:** backup, restore角色
– **监控管理员:** clusterMonitor角色
– **应用程序用户:** readWrite角色
– **只读用户:** read角色

## 权限分配
– 最小权限原则
– 基于业务需求分配权限
– 定期审查权限
– 及时撤销不必要的权限

## 角色继承
– 利用内置角色
– 创建自定义角色
– 合理使用角色继承
– 简化权限管理

## 权限审计
– 定期检查用户权限
– 监控权限变更
– 记录权限操作
– 确保权限合规

生产环境建议:在生产环境中,安全规划是一个持续的过程,需要定期审查和更新安全配置,确保系统的安全性。学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 MongoDB启用认证

3.1.1 配置认证

# 启用认证

## 修改配置文件
$ cat > /mongodb/conf/mongod.conf << EOF # mongod.conf # 安全配置 security: authorization: enabled EOF ## 重启MongoDB服务 $ sudo -u mongodb /mongodb/app/bin/mongod --config /mongodb/conf/mongod.conf --shutdown $ sudo -u mongodb /mongodb/app/bin/mongod --config /mongodb/conf/mongod.conf

3.1.2 创建管理员用户

# 创建管理员用户
$ /mongodb/app/bin/mongosh

# 切换到admin数据库
fgedu.net.cn> use admin

# 创建管理员用户
fgedu.net.cn> db.createUser({
… user: “fgedu”,
… pwd: “fgedu123”,
… roles: [ { role: “userAdminAnyDatabase”, db: “admin” }, “readWriteAnyDatabase” ]
… })

# 验证用户创建
fgedu.net.cn> db.getUsers()

3.2 MongoDB用户创建与管理

3.2.1 创建应用程序用户

# 创建应用程序用户
$ /mongodb/app/bin/mongosh -u fgedu -p fgedu123 –authenticationDatabase admin

# 切换到业务数据库
fgedu.net.cn> use fgedudb

# 创建应用程序用户
fgedu.net.cn> db.createUser({
… user: “fgedu_app”,
… pwd: “fgedu_app123”,
… roles: [ { role: “readWrite”, db: “fgedudb” } ]
… })

# 验证用户创建
fgedu.net.cn> db.getUsers()

3.2.2 创建只读用户

# 创建只读用户
$ /mongodb/app/bin/mongosh -u fgedu -p fgedu123 –authenticationDatabase admin

# 切换到业务数据库
fgedu.net.cn> use fgedudb

# 创建只读用户
fgedu.net.cn> db.createUser({
… user: “fgedu_read”,
… pwd: “fgedu_read123”,
… roles: [ { role: “read”, db: “fgedudb” } ]
… })

# 验证用户创建
fgedu.net.cn> db.getUsers()

3.2.3 用户管理

# 用户管理

## 修改用户密码
fgedu.net.cn> db.changeUserPassword(“fgedu_app”, “new_password123”)

## 更新用户角色
fgedu.net.cn> db.updateUser(“fgedu_app”, {
… roles: [ { role: “readWrite”, db: “fgedudb” }, { role: “read”, db: “fgedudb02” } ]
… })

## 删除用户
fgedu.net.cn> db.dropUser(“fgedu_read”)

## 查看用户信息
fgedu.net.cn> db.getUser(“fgedu_app”)

3.3 MongoDB角色管理

3.3.1 创建自定义角色

# 创建自定义角色
$ /mongodb/app/bin/mongosh -u fgedu -p fgedu123 –authenticationDatabase admin

# 切换到admin数据库
fgedu.net.cn> use admin

# 创建自定义角色
fgedu.net.cn> db.createRole({
… role: “fgedu_backup_role”,
… privileges: [
… { resource: { db: “*”, collection: “*” }, actions: [ “find”, “listCollections”, “listDatabases” ] },
… { resource: { db: “admin”, collection: “system.users” }, actions: [ “find” ] }
… ],
… roles: [ { role: “backup”, db: “admin” } ]
… })

# 验证角色创建
fgedu.net.cn> db.getRole(“fgedu_backup_role”, { showPrivileges: true })

3.3.2 角色管理

# 角色管理

## 更新角色
fgedu.net.cn> db.updateRole(“fgedu_backup_role”, {
… privileges: [
… { resource: { db: “*”, collection: “*” }, actions: [ “find”, “listCollections”, “listDatabases” ] },
… { resource: { db: “admin”, collection: “system.users” }, actions: [ “find” ] },
… { resource: { db: “admin”, collection: “system.version” }, actions: [ “find” ] }
… ],
… roles: [ { role: “backup”, db: “admin” } ]
… })

## 删除角色
fgedu.net.cn> db.dropRole(“fgedu_backup_role”)

## 查看所有角色
fgedu.net.cn> db.getRoles({ showPrivileges: true })

风哥提示:在生产环境中,应该根据业务需求创建合适的用户和角色,遵循最小权限原则,确保系统的安全性。更多学习教程公众号风哥教程itpux_com

Part04-生产案例与实战讲解

4.1 MongoDB认证实战案例

以下是MongoDB认证的实战案例:

# 认证实战案例

## 环境信息
– MongoDB版本:5.0.13
– 部署模式:单节点
– 操作系统:Oracle Linux 9.3

## 启用认证

### 1. 修改配置文件
$ cat > /mongodb/conf/mongod.conf << EOF # mongod.conf storage: dbPath: /mongodb/fgdata journal: enabled: true systemLog: destination: file logAppend: true path: /mongodb/log/mongod.log net: port: 27017 bindIp: 0.0.0.0 processManagement: fork: true pidFilePath: /mongodb/app/mongod.pid security: authorization: enabled EOF ### 2. 重启MongoDB服务 $ sudo -u mongodb /mongodb/app/bin/mongod --config /mongodb/conf/mongod.conf --shutdown $ sudo -u mongodb /mongodb/app/bin/mongod --config /mongodb/conf/mongod.conf ### 3. 创建管理员用户 $ /mongodb/app/bin/mongosh fgedu.net.cn> use admin
fgedu.net.cn> db.createUser({
… user: “fgedu”,
… pwd: “fgedu123”,
… roles: [ { role: “userAdminAnyDatabase”, db: “admin” }, “readWriteAnyDatabase” ]
… })

### 4. 验证认证
$ /mongodb/app/bin/mongosh
fgedu.net.cn> show dbs
# 应该报错,因为没有认证

$ /mongodb/app/bin/mongosh -u fgedu -p fgedu123 –authenticationDatabase admin
fgedu.net.cn> show dbs
# 应该成功显示数据库列表

4.2 MongoDB授权实战案例

以下是MongoDB授权的实战案例:

# 授权实战案例

## 环境信息
– MongoDB版本:5.0.13
– 部署模式:单节点
– 操作系统:Oracle Linux 9.3

## 创建用户和角色

### 1. 连接MongoDB
$ /mongodb/app/bin/mongosh -u fgedu -p fgedu123 –authenticationDatabase admin

### 2. 创建业务数据库
fgedu.net.cn> use fgedudb
fgedu.net.cn> db.createCollection(“fgedu_collection”)

### 3. 创建应用程序用户
fgedu.net.cn> db.createUser({
… user: “fgedu_app”,
… pwd: “fgedu_app123”,
… roles: [ { role: “readWrite”, db: “fgedudb” } ]
… })

### 4. 创建只读用户
fgedu.net.cn> db.createUser({
… user: “fgedu_read”,
… pwd: “fgedu_read123”,
… roles: [ { role: “read”, db: “fgedudb” } ]
… })

### 5. 验证授权

#### 应用程序用户验证
$ /mongodb/app/bin/mongosh -u fgedu_app -p fgedu_app123 –authenticationDatabase fgedudb
fgedu.net.cn> use fgedudb
fgedu.net.cn> db.fgedu_collection.insertOne({name: “test”, age: 30})
# 应该成功
fgedu.net.cn> db.fgedu_collection.find()
# 应该成功

#### 只读用户验证
$ /mongodb/app/bin/mongosh -u fgedu_read -p fgedu_read123 –authenticationDatabase fgedudb
fgedu.net.cn> use fgedudb
fgedu.net.cn> db.fgedu_collection.find()
# 应该成功
fgedu.net.cn> db.fgedu_collection.insertOne({name: “test2”, age: 25})
# 应该报错,因为没有写权限

4.3 MongoDB安全加固实战

以下是MongoDB安全加固的实战案例:

# 安全加固实战

## 环境信息
– MongoDB版本:5.0.13
– 部署模式:单节点
– 操作系统:Oracle Linux 9.3

## 安全加固措施

### 1. 启用认证
$ cat > /mongodb/conf/mongod.conf << EOF security: authorization: enabled EOF ### 2. 限制网络访问 $ cat > /mongodb/conf/mongod.conf << EOF net: bindIp: 127.0.0.1,192.168.1.101 EOF ### 3. 启用SSL/TLS #### 生成证书 $ openssl req -newkey rsa:2048 -new -x509 -days 365 -nodes -out mongodb-cert.crt -keyout mongodb-cert.key $ cat mongodb-cert.key mongodb-cert.crt > mongodb.pem

#### 配置SSL/TLS
$ cat > /mongodb/conf/mongod.conf << EOF net: ssl: mode: requireSSL PEMKeyFile: /mongodb/conf/mongodb.pem EOF ### 4. 启用审计 $ cat > /mongodb/conf/mongod.conf << EOF auditLog: destination: file format: JSON path: /mongodb/log/audit.log EOF ### 5. 配置防火墙 $ sudo firewall-cmd --permanent --add-port=27017/tcp $ sudo firewall-cmd --reload ### 6. 定期更新密码 $ /mongodb/app/bin/mongosh -u fgedu -p fgedu123 --authenticationDatabase admin fgedu.net.cn> use admin
fgedu.net.cn> db.changeUserPassword(“fgedu”, “new_password123”)

### 7. 定期审查用户权限
fgedu.net.cn> db.getUsers()
fgedu.net.cn> db.getUser(“fgedu_app”)

生产环境建议:在生产环境中,需要综合使用多种安全措施,确保MongoDB的安全性。from MongoDB视频:www.itpux.com

Part05-风哥经验总结与分享

5.1 MongoDB安全最佳实践

MongoDB安全的最佳实践建议:

# 安全最佳实践

## 网络安全
– 限制绑定IP地址
– 使用防火墙限制访问
– 启用SSL/TLS加密传输
– 配置网络隔离

## 认证与授权
– 启用认证
– 使用强密码策略
– 最小权限原则
– 定期审查用户权限

## 审计与监控
– 启用审计日志
– 配置审计过滤器
– 定期检查审计日志
– 监控异常访问

## 数据安全
– 定期备份数据
– 加密敏感数据
– 保护备份数据
– 测试恢复流程

## 系统安全
– 定期更新MongoDB版本
– 操作系统安全加固
– 限制MongoDB进程权限
– 定期安全扫描

5.2 MongoDB认证最佳实践

MongoDB认证的最佳实践建议:

# 认证最佳实践

## 用户管理
– 创建专用的管理员用户
– 为每个应用创建专用用户
– 使用不同的用户角色
– 定期更新密码

## 密码策略
– 使用强密码
– 密码长度至少8位
– 包含大小写字母、数字和特殊字符
– 定期更新密码

## 认证机制
– 使用SCRAM认证(默认)
– 对于高安全场景使用x.509
– 集成企业认证系统(LDAP/Kerberos)
– 定期轮换认证凭据

## 连接安全
– 使用SSL/TLS加密连接
– 验证服务器证书
– 配置客户端证书(可选)
– 限制连接来源

5.3 MongoDB安全故障排查

MongoDB安全故障排查的建议:

# 安全故障排查

## 认证失败
– 检查用户名和密码
– 检查认证数据库
– 检查用户是否存在
– 检查密码是否正确

## 授权失败
– 检查用户角色
– 检查权限是否足够
– 检查操作是否允许
– 检查数据库是否正确

## 连接失败
– 检查网络连接
– 检查防火墙规则
– 检查SSL/TLS配置
– 检查认证配置

## 审计问题
– 检查审计日志配置
– 检查审计过滤器
– 检查日志文件权限
– 检查审计日志大小

## 安全漏洞
– 定期更新MongoDB版本
– 检查安全公告
– 进行安全扫描
– 修复已知漏洞

风哥提示:MongoDB的安全是一个持续的过程,需要定期审查和更新安全配置,确保系统的安全性。建议建立安全审计机制,定期检查安全配置和日志,及时发现和解决安全问题。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息