MongoDB采用基于角色的訪問控制(RBAC)機制,通過用戶、角色、權限的組合實現細粒度權限管理。核心要素包括:
readWrite、dbAdmin)和自定義角色;find、insert、update)。權限管理的前提是啟用認證并限制網絡訪問,避免未授權連接。
編輯MongoDB配置文件(/etc/mongod.conf),在security部分添加以下配置:
security:
authorization: enabled
保存后重啟MongoDB服務使配置生效:
sudo systemctl restart mongod
在/etc/mongod.conf的net部分,設置bindIp為允許連接的IP地址(如本地127.0.0.1和特定IP192.168.1.100):
net:
bindIp: 127.0.0.1,192.168.1.100 # 允許本地和指定IP連接
port: 27017 # 默認端口
重啟MongoDB服務:
sudo systemctl restart mongod
為管理MongoDB用戶(如創建、修改、刪除用戶),需在admin數據庫創建管理員用戶,并分配用戶管理角色。
mongo
admin數據庫use admin
例如,創建名為adminUser的用戶,密碼為StrongPass123,分配userAdminAnyDatabase(管理所有數據庫用戶)和readWriteAnyDatabase(讀寫所有數據庫)角色:
db.createUser({
user: "adminUser",
pwd: "StrongPass123",
roles: ["userAdminAnyDatabase", "readWriteAnyDatabase"]
})
執行后返回Successfully added user表示創建成功。
為特定數據庫創建普通用戶,分配最小必要權限(遵循最小權限原則)。
例如,為目標數據庫myDatabase創建用戶:
use myDatabase
例如,創建名為myUser的用戶,密碼為UserPass456,分配readWrite(讀寫數據)角色:
db.createUser({
user: "myUser",
pwd: "UserPass456",
roles: [{ role: "readWrite", db: "myDatabase" }]
})
若需為用戶添加多個角色(如同時擁有readWrite和dbAdmin),可使用數組:
db.createUser({
user: "myUser",
pwd: "UserPass456",
roles: [
{ role: "readWrite", db: "myDatabase" },
{ role: "dbAdmin", db: "myDatabase" }
]
})
使用db.auth()命令驗證用戶身份及權限:
// 切換到目標數據庫
use myDatabase
// 驗證用戶(返回1表示成功)
db.auth("myUser", "UserPass456")
若需為用戶添加或移除權限,可使用db.grantRolesToUser()(添加)或db.revokeRolesFromUser()(移除)命令。
例如,為用戶myUser添加read(讀取數據)角色:
use myDatabase
db.grantRolesToUser("myUser", [{ role: "read", db: "myDatabase" }])
移除read角色:
db.revokeRolesFromUser("myUser", [{ role: "read", db: "myDatabase" }])
若需刪除用戶,可使用db.dropUser()命令:
use myDatabase
db.dropUser("myUser")
執行后返回true表示刪除成功。
若需記錄用戶操作(如登錄、查詢、修改數據),可啟用MongoDB審計日志功能。
編輯/etc/mongod.conf,在security部分添加以下配置:
security:
auditLog:
destination: file
format: JSON
path: /var/log/mongodb/audit.json
保存后重啟MongoDB服務:
sudo systemctl restart mongod
審計日志將保存到/var/log/mongodb/audit.json,可用于追蹤用戶操作。
通過以上步驟,可在Ubuntu上實現MongoDB的完整權限管理,確保數據庫訪問的安全性和可控性。