温馨提示×

MongoDB在CentOS上的权限管理如何操作

小樊
46
2025-11-07 18:39:14
栏目: 云计算

MongoDB在CentOS上的权限管理操作指南

1. 准备工作:安装MongoDB并启动服务

若未安装MongoDB,可通过Yum包管理器安装(以MongoDB官方仓库为例):

sudo yum install -y mongodb-org

启动MongoDB服务并设置开机自启:

sudo systemctl start mongod
sudo systemctl enable mongod

验证服务状态:

sudo systemctl status mongod

2. 启用权限认证

权限管理的核心是启用MongoDB的内置认证机制,需修改配置文件/etc/mongod.conf

sudo vi /etc/mongod.conf

找到security section,添加或修改以下内容:

security:
  authorization: enabled

保存退出后,重启MongoDB服务使配置生效:

sudo systemctl restart mongod

3. 创建管理员用户(管理所有数据库)

管理员用户用于管理MongoDB实例(如创建/删除用户、备份/恢复数据库),需在admin数据库中创建。连接MongoDB shell:

mongo

切换至admin数据库,创建管理员用户(以admin为例):

use admin
db.createUser({
  user: "admin",
  pwd: "StrongAdminPassword123!",  // 替换为强密码(包含大小写字母、数字、特殊字符)
  roles: ["root"]                  // root角色拥有所有数据库的管理权限
})

退出shell:

exit

4. 使用管理员身份连接MongoDB

后续操作需通过管理员身份认证,连接命令:

mongo -u admin -p StrongAdminPassword123 --authenticationDatabase admin

5. 创建普通数据库用户并分配权限

根据业务需求为用户分配最小必要权限,常见场景如下:

① 只读用户(仅查询数据)
use mydatabase  // 切换至目标数据库(如mydatabase)
db.createUser({
  user: "readonly_user",
  pwd: "ReadOnlyPass456!",
  roles: [{ role: "read", db: "mydatabase" }]  // 只读权限
})
② 读写用户(增删改查数据)
use mydatabase
db.createUser({
  user: "readwrite_user",
  pwd: "ReadWritePass789!",
  roles: [{ role: "readWrite", db: "mydatabase" }]  // 读写权限
})
③ 数据库管理员(管理数据库结构)
use mydatabase
db.createUser({
  user: "dbadmin_user",
  pwd: "DBAdminPass101!",
  roles: [{ role: "dbAdmin", db: "mydatabase" }]  // 数据库管理权限(如创建集合、索引)
})
④ 特定集合权限(限制访问特定集合)
use mydatabase
db.createUser({
  user: "specific_collection_user",
  pwd: "SpecificPass112!",
  roles: [{ 
    role: "read", 
    db: "mydatabase", 
    collection: "specific_collection"  // 仅能访问specific_collection集合
  }]
})

6. 管理用户权限(增删改查)

连接管理员账户后,可使用以下命令管理用户权限:

① 查看用户列表
use admin
db.system.users.find()  // 查看所有用户
② 查看用户详情
use mydatabase
db.getUser("readonly_user")  // 查看readonly_user的权限详情
③ 修改用户密码
use mydatabase
db.changeUserPassword("readonly_user", "NewReadOnlyPass456!")
④ 删除用户
use mydatabase
db.dropUser("readonly_user")
⑤ 授予额外角色(扩展权限)
use mydatabase
db.grantRolesToUser("readwrite_user", [{ role: "dbAdmin", db: "mydatabase" }])  // 给readwrite_user添加数据库管理权限
⑥ 撤销角色(收缩权限)
use mydatabase
db.revokeRolesFromUser("readwrite_user", [{ role: "dbAdmin", db: "mydatabase" }])  // 移除readwrite_user的数据库管理权限

7. 验证用户权限

使用创建的用户连接MongoDB,验证权限是否生效:

# 以readonly_user为例
mongo -u readonly_user -p ReadOnlyPass456 --authenticationDatabase mydatabase

连接后尝试执行操作:

use mydatabase
db.collection.find()  // 应成功(只读权限)
db.collection.insert({ name: "test" })  // 应报错(无写权限)
exit

8. 安全增强建议

  • 强密码策略:使用包含大小写字母、数字、特殊字符的密码,定期更换。
  • 最小权限原则:仅授予用户完成工作所需的最小权限(如不需要数据库管理权限则不分配dbAdmin)。
  • 网络隔离:通过防火墙限制MongoDB端口(默认27017)的访问范围(如仅允许内网IP):
    sudo firewall-cmd --permanent --zone=public --add-port=27017/tcp
    sudo firewall-cmd --reload
    
  • 启用SSL/TLS:加密MongoDB通信,防止数据泄露(需配置证书)。
  • 定期审计:通过db.runCommand({ connectionStatus: 1 })查看当前连接的用户信息,监控异常操作。

以上步骤覆盖了MongoDB在CentOS上的权限管理核心操作,可根据实际业务需求调整用户角色和权限。

0