MongoDB 用户管理

MongoDB 用户管理全解析

(MongoDB 8.0+ 最新实践,2025 年)

MongoDB 的用户管理基于 RBAC(Role-Based Access Control,角色访问控制),所有用户必须在 admin 数据库创建,权限通过 角色(Role) 分配。
默认安装 未启用认证,生产环境 必须开启


一、核心概念速览

概念说明
User用户,绑定到特定数据库
Role角色,定义一组权限(如 read, readWrite
Database用户创建在哪个库,就从该库认证(推荐 admin
Authentication认证方式:SCRAM(默认)、x.509、LDAP、Kerberos
Authorization权限控制,开启后未登录用户只能访问 test

二、启用用户认证(必须)

1. 修改配置文件 mongod.conf

# /etc/mongod.conf (Linux) 或 Homebrew 路径
security:
  authorization: enabled   # 关键:开启权限控制

net:
  port: 27017
  bindIp: 127.0.0.1        # 生产建议 0.0.0.0 + 防火墙

2. 重启 MongoDB

sudo systemctl restart mongod          # Linux
brew services restart mongodb-community@8.0  # macOS

三、创建用户(推荐在 admin 库)

1. 连接本地(首次无认证)

mongosh

2. 创建管理员用户(root 权限)

use admin

db.createUser({
  user: "admin",
  pwd: "YourStrongP@ssw0rd2025!",
  roles: [ "root" ]   // 等价于所有数据库的 dbAdmin + readWrite + userAdmin
})

安全建议

  • 密码 ≥ 12 位,含大小写+数字+符号
  • 不要用 admin 作为日常用户

四、常用内置角色(Built-in Roles)

角色权限适用场景
read只读报表、监控
readWrite读写应用连接
dbAdmin管理集合/索引运维
userAdmin管理用户安全管理员
clusterAdmin管理集群分片/副本集
root超级用户初始管理员
backup / restore备份恢复运维工具

五、创建业务用户(推荐最小权限原则)

示例:为 company 数据库创建应用用户

use company

db.createUser({
  user: "app_user",
  pwd: "AppP@ss2025!",
  roles: [
    { role: "readWrite", db: "company" },   // 只对 company 库读写
    { role: "read", db: "logs" }            // 可读日志库
  ]
})

示例:只读用户(报表)

use reporting
db.createUser({
  user: "report_user",
  pwd: "Report123!",
  roles: [ { role: "read", db: "company" } ]
})

六、用户管理常用命令

操作命令
查看用户db.getUsers()show users
修改密码db.changeUserPassword("username", "newpass")
更新角色db.updateUser("username", { roles: [...] })
删除用户db.dropUser("username")
查看当前用户db.runCommand({connectionStatus: 1})
// 示例:给 app_user 增加 backup 权限
db.updateUser("app_user", {
  roles: [
    { role: "readWrite", db: "company" },
    { role: "backup", db: "admin" }
  ]
})

七、连接认证用户

1. 命令行连接

mongosh -u admin -p --authenticationDatabase admin
# 或
mongosh "mongodb://admin:pass@localhost:27017/admin"

2. 连接字符串(URI)

# 标准连接
mongodb://app_user:AppP@ss2025!@localhost:27017/company

# Atlas 云数据库
mongodb+srv://user:pass@cluster0.xxxxx.mongodb.net/myDB

注意:特殊字符需 URL 编码(如 @%40


八、自定义角色(Custom Roles)

当内置角色不满足需求时,可自定义:

use admin
db.createRole({
  role: "logManager",
  privileges: [
    {
      resource: { db: "logs", collection: "" },
      actions: [ "find", "insert", "remove", "createIndex" ]
    }
  ],
  roles: []  // 可继承其他角色
})

// 分配给用户
db.createUser({
  user: "log_app",
  pwd: "log123",
  roles: [ "logManager" ]
})

九、生产环境最佳实践

实践说明
所有用户在 admin 创建便于统一管理
最小权限原则应用只给 readWrite 当前库
定期轮换密码每 90 天更换
禁用默认用户删除 test 库用户
启用审计日志记录登录、操作
使用 TLS/SSL加密传输
IP 白名单防火墙限制来源

启用审计(mongod.conf

auditLog:
  destination: file
  path: /var/log/mongodb/audit.log
  filter: '{ atype: { $in: ["authCheck", "authenticate"] } }'

十、常见问题排查

问题解决方案
Unauthorized检查用户名、密码、认证库(--authenticationDatabase
not authorized on admin to execute command用户无对应权限,检查 roles
UserNotFound用户不存在,用 show users 确认
连接超时检查 bindIpfirewall、MongoDB 是否运行

十一、用户管理脚本示例

// create_users.js
use admin

// 管理员
db.createUser({
  user: "admin",
  pwd: "Admin2025!",
  roles: ["root"]
})

// 应用用户
use ecommerce
db.createUser({
  user: "shop_app",
  pwd: "Shop@2025",
  roles: [{ role: "readWrite", db: "ecommerce" }]
})

// 只读用户
use analytics
db.createUser({
  user: "bi_user",
  pwd: "BI@2025",
  roles: [{ role: "read", db: "ecommerce" }]
})

print("所有用户创建完成!")

运行:

mongosh create_users.js

十二、GUI 工具管理用户

工具支持
MongoDB Compass创建/编辑/删除用户
MongoDB for VS Code图形化用户管理
MongoDB AtlasWeb 界面管理

总结:用户管理三步曲

graph TD
    A[1. 开启 authorization] --> B[2. 创建 admin 用户]
    B --> C[3. 创建业务用户(最小权限)]
    C --> D[4. 应用使用连接字符串登录]

安全口诀

“admin 建用户,业务最小权,认证必开启,密码要复杂”


如需 LDAP/Kerberos 集成多租户用户隔离自动化用户轮换脚本从 MySQL 迁移用户体系,欢迎继续提问!

文章已创建 2349

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部