在Ubuntu上进行MongoDB权限管理前,需完成以下基础步骤:
sudo systemctl start mongod启动服务,通过sudo systemctl status mongod确认服务状态为“active (running)”。权限管理的核心是启用访问控制,需修改MongoDB配置文件并重启服务:
/etc/mongod.conf,找到security section,添加或修改以下内容:security:
authorization: enabled
sudo systemctl restart mongod使身份验证生效。管理员用户用于管理所有数据库的用户和权限,需在admin数据库中创建:
mongo命令进入交互式Shell。use admin。db.createUser()创建具备用户管理权限的用户(如adminUser),示例:db.createUser({
user: "adminUser",
pwd: "StrongAdminPassword123!",
roles: ["userAdminAnyDatabase", "readWriteAnyDatabase"]
})
userAdminAnyDatabase:允许管理所有数据库的用户账户。readWriteAnyDatabase:允许对所有数据库进行读写操作(可选,根据需求调整)。为目标数据库创建专用用户,并分配最小必要权限(遵循最小权限原则):
mongo -u adminUser -p StrongAdminPassword123 --authenticationDatabase admin
use myDatabase(将myDatabase替换为实际数据库名)。db.createUser()创建用户(如myUser),并分配对应角色,示例:
db.createUser({
user: "myUser",
pwd: "AppUserPassword456!",
roles: ["readWrite"]
})
db.createUser({
user: "dbAdmin",
pwd: "DBAdminPassword789!",
roles: ["dbOwner"]
})
db.grantRolesToUser("myUser", [
{ role: "readWrite", db: "myDatabase" },
{ role: "dbAdmin", db: "myDatabase" }
])
read:仅读取数据。readWrite:读取+写入数据。dbOwner:数据库所有者(包含readWrite、dbAdmin等权限)。userAdmin:管理当前数据库的用户和角色。使用创建的用户连接MongoDB,验证权限是否生效:
mongo -u myUser -p AppUserPassword456 --authenticationDatabase myDatabase
show dbs:若用户无listDatabases权限,仅显示当前数据库。db.collection.insert({name: "test"}):若用户有readWrite权限,可成功插入数据;否则报错“unauthorized”。db.changeUserPassword(),例如:use admin
db.changeUserPassword("adminUser", "NewStrongPassword123!")
db.dropUser(),例如:use myDatabase
db.dropUser("myUser")
db.getUser(),例如:use myDatabase
db.getUser("myUser")
/etc/mongod.conf中的net.bindIp,仅允许特定IP访问(如本地和公司IP):net:
port: 27017
bindIp: 127.0.0.1,192.168.1.100
重启服务后生效:sudo systemctl restart mongod。sudo cp /etc/mongod.conf /etc/mongod.conf.bak)。