在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
)。