首先確保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認證(默認啟用)。