MongoDB 2.6 版本大幅修改使用者管理機制,db.addUser() 已棄用,改用 db.createUser()。若 Shell 版本與 Server 版本不匹配 (如 Server 2.6 + Shell 2.4),將導致 auth failed (code 18) 錯誤。
# 檢查 Server 版本
mongo --eval "db.version()"
# 檢查 Shell 版本
mongo --version
# Ubuntu/Debian 更新 Shell 至 2.6
sudo apt-get remove mongodb-clients
sudo apt-get autoremove && sudo apt-get autoclean
sudo apt-get install mongodb-org-shell=2.6.1
use test2
db.createUser({
user: "test",
pwd: "admin",
roles: [
{ role: "readWrite", db: "test2" }, // 讀寫權限
{ role: "dbAdmin", db: "test2" } // 資料庫管理權限 (可建索引、統計等)
]
})
| 內建角色 | 權限範圍 |
|---|---|
| read | 唯讀 |
| readWrite | 讀寫 |
| dbAdmin | 資料庫管理 (索引、統計、驗證等),無資料讀寫權 |
| userAdmin | 使用者管理 (建立/修改/刪除使用者、角色) |
| dbOwner | 資料庫擁有者 (包含 readWrite + dbAdmin + userAdmin) |
| root | 超級管理員 (僅 admin 資料庫可建立),擁有所有資料庫權限 |
# 使用建立的帳號連線
mongo 192.168.1.111/test2 -u test -p admin
# 連線後驗證權限
show collections
db.testCollection.insert({x:1})
db.testCollection.find()
--auth 或設定檔 security.authorization: enabled。roles 陣列中每個角色物件必須指定 db 欄位,指出角色生效的資料庫。net.ssl.mode: requireSSL)。read 角色)。auditLog)。