若未安装MongoDB,可通过Yum包管理器安装(以MongoDB官方仓库为例):
sudo yum install -y mongodb-org
启动MongoDB服务并设置开机自启:
sudo systemctl start mongod
sudo systemctl enable mongod
验证服务状态:
sudo systemctl status mongod
权限管理的核心是启用MongoDB的内置认证机制,需修改配置文件/etc/mongod.conf:
sudo vi /etc/mongod.conf
找到security section,添加或修改以下内容:
security:
authorization: enabled
保存退出后,重启MongoDB服务使配置生效:
sudo systemctl restart mongod
管理员用户用于管理MongoDB实例(如创建/删除用户、备份/恢复数据库),需在admin数据库中创建。连接MongoDB shell:
mongo
切换至admin数据库,创建管理员用户(以admin为例):
use admin
db.createUser({
user: "admin",
pwd: "StrongAdminPassword123!", // 替换为强密码(包含大小写字母、数字、特殊字符)
roles: ["root"] // root角色拥有所有数据库的管理权限
})
退出shell:
exit
后续操作需通过管理员身份认证,连接命令:
mongo -u admin -p StrongAdminPassword123 --authenticationDatabase admin
根据业务需求为用户分配最小必要权限,常见场景如下:
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集合
}]
})
连接管理员账户后,可使用以下命令管理用户权限:
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的数据库管理权限
使用创建的用户连接MongoDB,验证权限是否生效:
# 以readonly_user为例
mongo -u readonly_user -p ReadOnlyPass456 --authenticationDatabase mydatabase
连接后尝试执行操作:
use mydatabase
db.collection.find() // 应成功(只读权限)
db.collection.insert({ name: "test" }) // 应报错(无写权限)
exit
dbAdmin)。sudo firewall-cmd --permanent --zone=public --add-port=27017/tcp
sudo firewall-cmd --reload
db.runCommand({ connectionStatus: 1 })查看当前连接的用户信息,监控异常操作。以上步骤覆盖了MongoDB在CentOS上的权限管理核心操作,可根据实际业务需求调整用户角色和权限。