Ubuntu 上 MongoDB 权限管理实操指南
一 启用认证与基础安全
- 编辑配置文件:sudo nano /etc/mongod.conf,在文件中启用安全项并建议限制绑定地址
- 示例:
- security.authorization: enabled
- net.bindIp: 127.0.0.1(如需远程,再改为服务器内网/公网 IP,谨慎开放)
- 重启服务并设为开机自启:
- sudo systemctl restart mongod
- sudo systemctl enable mongod
- 注意:首次启用认证前,先在未开启认证的状态下创建管理员账户,否则将被锁在外面无法创建用户。
二 创建管理员账户
- 连接 Shell:mongosh(旧版可用 mongo)
- 切换到 admin 库并创建超级管理员(仅在 admin 库可创建具有跨库权限的角色):
- use admin
- db.createUser({ user: “admin”, pwd: “StrongPass!”, roles: [{ role: “root”, db: “admin” }] })
- 验证登录:mongosh -u admin -p StrongPass! --authenticationDatabase admin
- 说明:具有 root 角色的账号拥有最高权限;也可按需创建仅具用户管理权限的账号(如 userAdminAnyDatabase),再由其分配各库用户。
三 为业务库创建用户与授权
- 原则:在哪个库创建用户,该用户的“认证数据库”就是那个库;跨库权限需在 admin 库授予相应角色。
- 示例(为业务库 my_db 创建拥有完整权限的账号):
- use my_db
- db.createUser({ user: “app_user”, pwd: “AppPass!”, roles: [{ role: “dbOwner”, db: “my_db” }] })
- 示例(只读账号):
- use my_db
- db.createUser({ user: “reader”, pwd: “ReadPass!”, roles: [{ role: “read”, db: “my_db” }] })
- 连接验证:mongosh mongodb://app_user:AppPass!@127.0.0.1:27017/my_db
- 常用内置角色(按最小权限原则分配):
- 数据库级:read、readWrite、dbAdmin、dbOwner、userAdmin
- 集群级:clusterAdmin、clusterManager、clusterMonitor、hostManager
- 备份恢复:backup、restore
- 全库级(仅 admin 库可授):readAnyDatabase、readWriteAnyDatabase、dbAdminAnyDatabase、userAdminAnyDatabase
- 超级用户:root。
四 日常运维与常见操作
- 查看某库用户:use my_db → show users
- 修改用户密码(需在相应用户所在库执行):
- db.changeUserPassword(“app_user”, “NewPass!”)
- 删除用户:use my_db → db.dropUser(“app_user”)
- 以特定账户执行命令(命令行):
- mongosh -u reader -p ReadPass! --authenticationDatabase my_db my_db
- 导入导出时指定账户:
- mongoimport -h 127.0.0.1 --port 27017 -u admin -p StrongPass! -d student -c areas areas.dat --authenticationDatabase admin
- 注意:旧版 Shell 的 addUser 已不推荐,统一使用 createUser。
五 远程访问与防火墙要点
- 仅当需要远程连接时,修改 /etc/mongod.conf:
- net.bindIp: 0.0.0.0(或指定内网 IP 段)
- 并确保 security.authorization: enabled
- 重启服务:sudo systemctl restart mongod
- 防火墙放行(UFW):sudo ufw allow 27017(如面向公网,务必配合强认证与 IP 白名单)。