文章目錄
- MongoDB 用戶管理
- 1. 連接到 MongoDB
- 2. 用戶創建
- 2.1 創建管理員用戶
- 2.2 創建特定數據庫用戶
- 2.3 常用內置角色
- 3. 用戶管理操作
- 3.1 查看所有用戶
- 3.2 查看特定用戶信息
- 3.3 更新用戶密碼
- 3.4 添加用戶角色
- 3.5 移除用戶角色
- 3.6 刪除用戶
- 4. 權限修改
- 4.1 創建自定義角色
- 4.2 將自定義角色分配給用戶
- 5. 啟用身份驗證
- 6. 允許遠程連接
- 6.1 修改綁定IP
- 6.2 防火墻設置
- 6.3 安全注意事項
- 7. 使用認證連接
- 8. 最佳實踐
- 9. 常見問題解決
- 9.1 忘記管理員密碼
- 9.2 連接被拒絕
MongoDB 用戶管理
1. 連接到 MongoDB
在開始管理用戶之前,首先需要連接到 MongoDB 實例:
# 連接到本地 MongoDB 實例
mongo# 或者連接到遠程實例
mongo --host <hostname> --port <port> -u <username> -p <password>
2. 用戶創建
2.1 創建管理員用戶
最大權限
mongos> use admin
mongos> db.createUser({user: "admin", pwd: "admin123", roles: ["root"]})
首先創建一個具有用戶管理權限的管理員賬戶:
// 切換到 admin 數據庫
use admin// 創建管理員用戶
db.createUser({user: "adminUser",pwd: "securePassword123", // 實際使用時請設置更復雜的密碼roles: [{ role: "userAdminAnyDatabase", db: "admin" },{ role: "readWriteAnyDatabase", db: "admin" },{ role: "dbAdminAnyDatabase", db: "admin" },{ role: "clusterAdmin", db: "admin" }]
})
2.2 創建特定數據庫用戶
為特定數據庫創建用戶:
// 切換到目標數據庫
use myDatabase// 創建具有讀寫權限的用戶
db.createUser({user: "appUser",pwd: "appPassword123",roles: [{ role: "readWrite", db: "myDatabase" },{ role: "dbAdmin", db: "myDatabase" }]
})
2.3 常用內置角色
read
: 只讀權限readWrite
: 讀寫權限dbAdmin
: 數據庫管理權限userAdmin
: 用戶管理權限clusterAdmin
: 集群管理權限(僅admin數據庫)dbOwner
: 數據庫所有者(包含readWrite, dbAdmin和userAdmin權限)
3. 用戶管理操作
3.1 查看所有用戶
use admin
db.system.users.find()
3.2 查看特定用戶信息
db.getUser("appUser")
3.3 更新用戶密碼
db.updateUser("appUser", {pwd: "newSecurePassword456"
})
3.4 添加用戶角色
db.grantRolesToUser("appUser", [{ role: "read", db: "anotherDatabase" }
])
3.5 移除用戶角色
db.revokeRolesFromUser("appUser", [{ role: "read", db: "anotherDatabase" }
])
3.6 刪除用戶
db.dropUser("appUser")
4. 權限修改
4.1 創建自定義角色
use admin
db.createRole({role: "customAppRole",privileges: [{resource: { db: "myDatabase", collection: "customers" },actions: ["find", "insert", "update"]},{resource: { db: "myDatabase", collection: "orders" },actions: ["find"]}],roles: []
})
4.2 將自定義角色分配給用戶
db.grantRolesToUser("appUser", ["customAppRole"])
5. 啟用身份驗證
要使用戶管理生效,需要在 MongoDB 配置中啟用身份驗證:
- 編輯 MongoDB 配置文件(通常位于
/etc/mongod.conf
) - 添加或修改以下部分:
security:authorization: enabled
- 重啟 MongoDB 服務:
sudo systemctl restart mongod
6. 允許遠程連接
6.1 修改綁定IP
- 編輯 MongoDB 配置文件:
net:port: 27017bindIp: 0.0.0.0 # 允許所有IP連接,或指定特定IP
- 重啟 MongoDB 服務
6.2 防火墻設置
如果服務器有防火墻,需要開放 MongoDB 端口(默認27017):
sudo ufw allow 27017
6.3 安全注意事項
允許遠程連接時,務必:
- 使用強密碼
- 考慮設置網絡層面的訪問控制(如IP白名單)
- 啟用TLS/SSL加密連接
- 限制用戶權限到最小必要范圍
7. 使用認證連接
啟用認證后,連接時需要提供憑據:
mongo -u "appUser" -p "appPassword123" --authenticationDatabase "myDatabase"
或者在連接字符串中:
mongo "mongodb://appUser:appPassword123@localhost:27017/myDatabase"
8. 最佳實踐
- 遵循最小權限原則,只授予用戶必要的權限
- 定期審計用戶和權限
- 使用復雜的密碼并定期更換
- 生產環境考慮啟用TLS/SSL加密
- 對于重要操作,考慮使用審計日志
9. 常見問題解決
9.1 忘記管理員密碼
- 暫時關閉認證(修改配置文件,去掉authorization: enabled)
- 重啟 MongoDB
- 連接到無認證的實例
- 重置管理員密碼
- 重新啟用認證并重啟
9.2 連接被拒絕
- 檢查 MongoDB 服務是否運行
- 檢查防火墻設置
- 驗證綁定IP配置
- 檢查認證憑據是否正確