阅读量:25
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上的权限管理核心操作,可根据实际业务需求调整用户角色和权限。