在配置权限前,需确保MongoDB已正确安装在CentOS系统上。若未安装,可通过官方YUM仓库或手动安装包完成部署。安装完成后,启动MongoDB服务并设置开机自启:
sudo systemctl start mongod
sudo systemctl enable mongod
权限管理的核心是启用MongoDB的身份验证机制,需修改配置文件/etc/mongod.conf:
security段落,添加或修改以下配置:security:
authorization: enabled
sudo systemctl restart mongod
启用后,所有连接MongoDB的操作均需通过身份验证。
为便于后续管理其他用户及数据库权限,需先在admin数据库创建一个管理员账户(推荐使用root角色,拥有最高权限):
mongo
admin数据库,创建管理员用户(将your_password替换为强密码):use admin
db.createUser({
user: "admin",
pwd: "your_password",
roles: ["root"] // root角色拥有所有数据库的管理权限
})
exit
根据业务需求为不同数据库创建用户,并分配最小必要权限(避免过度授权)。常见角色及用途:
示例1:创建读写用户(针对mydb数据库,用户mydbuser):
mongo -u admin -p your_password --authenticationDatabase admin # 用管理员账户连接
use mydb
db.createUser({
user: "mydbuser",
pwd: "strong_password",
roles: ["readWrite", "dbAdmin"] // 读写+数据库管理权限
})
示例2:创建只读用户(针对reportdb数据库,用户reportuser):
use reportdb
db.createUser({
user: "reportuser",
pwd: "readonly_password",
roles: ["read"] // 仅读取权限
})
查看用户信息:
use admin # 管理员账户需切换至admin数据库
db.getUser("mydbuser") # 查看指定用户的角色及权限
修改用户密码:
use mydb
db.changeUserPassword("mydbuser", "new_password") # 替换为新密码
为用户添加角色(扩展权限):
db.grantRolesToUser("mydbuser", ["readWrite", "dbAdmin", "userAdmin"]) # 添加多个角色
从用户撤销角色(收缩权限):
db.revokeRolesFromUser("mydbuser", ["userAdmin"]) # 撤销userAdmin角色
删除用户:
db.dropUser("mydbuser") # 删除指定用户
使用创建的普通用户连接MongoDB,尝试执行对应操作,确认权限是否符合预期:
读写用户测试:
mongo -u mydbuser -p strong_password --authenticationDatabase mydb
use mydb
db.test.insert({name: "test"}) # 应成功(readWrite权限)
db.test.find() # 应成功(read权限)
只读用户测试:
mongo -u reportuser -p readonly_password --authenticationDatabase reportdb
use reportdb
db.test.insert({name: "test"}) # 应失败(无write权限)
db.test.find() # 应成功(read权限)
firewalld)限制MongoDB端口(默认27017)的访问范围,仅允许可信IP连接;db.runCommand({connectionStatus: 1})查看当前连接的用户及权限,定期审查用户权限设置。通过以上步骤,可实现CentOS上MongoDB的精细化权限管理,确保数据库的安全性与合规性。