首先确保Debian系统已更新,然后通过官方仓库安装MongoDB(以Debian 11 Bullseye为例):
sudo apt update && sudo apt upgrade -y
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
echo "deb [arch=amd64,arm64] https://repo.mongodb.org/apt/debian bullseye/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
sudo apt update
sudo apt install -y mongodb-org
启动MongoDB服务并设置开机自启:
sudo systemctl start mongod
sudo systemctl enable mongod
编辑MongoDB配置文件/etc/mongod.conf,在security部分添加或修改以下内容以启用认证:
security:
authorization: enabled
保存文件后重启MongoDB服务使配置生效:
sudo systemctl restart mongod
连接MongoDB shell(默认本地连接无需密码):
mongo
切换到admin数据库(管理员用户需在admin库中创建),创建具有root角色的管理员用户(root角色拥有所有权限):
use admin
db.createUser({
user: "admin",
pwd: "yourStrongPassword", // 替换为强密码
roles: [{ role: "root", db: "admin" }]
})
退出shell:
exit
假设要为用户appUser创建myApp数据库的读写权限:
mongo -u admin -p yourStrongPassword --authenticationDatabase admin
use myApp
根据需求选择合适的内置角色(常见角色说明见下文),例如创建读写权限用户:
db.createUser({
user: "appUser",
pwd: "appUserPassword",
roles: [{ role: "readWrite", db: "myApp" }] // 读写权限
})
或创建仅读权限用户:
db.createUser({
user: "readOnlyUser",
pwd: "readOnlyPassword",
roles: [{ role: "read", db: "myApp" }] // 只读权限
})
read(只读,排除系统集合)、readWrite(读写,排除系统集合);dbAdmin(数据库管理,如索引创建)、userAdmin(用户管理)、dbOwner(所有权限,包含readWrite+dbAdmin+userAdmin);clusterAdmin(集群最高权限)、clusterManager(集群管理与监控);backup(备份数据)、restore(还原数据);readAnyDatabase(所有数据库只读)、readWriteAnyDatabase(所有数据库读写);root(所有权限,仅在admin库创建)。mongo -u admin -p yourStrongPassword --authenticationDatabase admin
use myApp
db.auth("appUser", "appUserPassword") // 返回1表示验证成功
尝试插入数据(验证readWrite权限):
db.myCollection.insertOne({ name: "test" }) // 成功则权限正确
若权限不足,会返回Unauthorized错误。
编辑/etc/mongod.conf,在net部分添加bindIp和ipWhitelist限制访问IP:
net:
bindIp: 127.0.0.1,192.168.1.100 # 允许本地和指定IP访问
# security:
# ipWhitelist: ["127.0.0.1", "192.168.1.100"] # MongoDB 6.0+版本使用此配置
保存后重启MongoDB服务:
sudo systemctl restart mongod
db.system.users.find()查看用户列表);SCRAM-SHA-256认证(默认启用)。