sudo apt update && sudo apt install -y mongodb-org
sudo systemctl start mongod && sudo systemctl enable mongod
MongoDB默认无认证,需通过配置mongod.conf启用授权:
sudo nano /etc/mongod.conf
security section添加以下内容(若无security section则新建):security:
authorization: enabled
sudo systemctl restart mongod
管理员用户需具备userAdminAnyDatabase(管理所有数据库用户)和readWriteAnyDatabase(读写所有数据库)权限,建议创建在admin数据库:
mongo
admin数据库:use admin
adminUser为例):db.createUser({
user: "adminUser",
pwd: "StrongPassword123!", // 使用强密码
roles: ["userAdminAnyDatabase", "readWriteAnyDatabase"]
})
exit
根据需求为用户分配不同角色,常见场景如下:
若用户仅需访问特定数据库(如myDatabase),可分配readWrite角色:
mongo
use myDatabase
myUser为例)并分配权限:db.createUser({
user: "myUser",
pwd: "UserPassword456!",
roles: ["readWrite"] // 读写权限
})
exit
若用户需管理数据库结构(如创建集合、索引),可分配dbOwner角色:
use myDatabase
db.createUser({
user: "dbOwnerUser",
pwd: "OwnerPassword789!",
roles: ["dbOwner"] // 数据库所有者权限
})
exit
若用户仅需查询数据,可分配read角色:
use myDatabase
db.createUser({
user: "readOnlyUser",
pwd: "ReadOnlyPass123!",
roles: ["read"] // 只读权限
})
exit
创建用户后,需通过认证连接:
# 连接至特定数据库(如myDatabase)
mongo -u myUser -p UserPassword456 --authenticationDatabase myDatabase
# 连接至管理员账户(用于管理用户)
mongo -u adminUser -p StrongPassword123 --authenticationDatabase admin
insert、update、find等操作。insert会报错not authorized。db.getUser("username")查看用户角色:use myDatabase
db.getUser("myUser")
db.getUsers()查看所有用户及角色,及时清理闲置账户。mongod.conf中的bindIp(限制监听IP)和系统防火墙(如ufw),限制MongoDB端口(默认27017)的访问范围。