首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MongoDB 啟用認證後 Mongoose 正確連線設定指南

     編輯:程式設計綜合問答

問題背景

當 MongoDB 以 --auth 參數啟用認證後,使用 Mongoose 連線時常會遇到「驗證成功但隨後因權限不足而報錯」的情況。錯誤日誌通常顯示:Successfully authenticated as principal admin on root 緊接著出現 Unauthorized not authorized on root to execute command { listIndexes: ... }。

核心原因

MongoDB 3.0 版本後引入了 SCRAM-SHA-1 認證機制,且使用者帳號綁定在特定資料庫(authentication database)。Mongoose 連線字串若未正確指定認證資料庫,驗證雖通過,但後續操作會因權限不足而失敗。常見錯誤在於將認證資料庫誤設為 root 或目標業務資料庫,而非建立使用者時所在的資料庫(通常為 admin)。

正確連線方式

方法一:連線字串完整指定

mongoose.connect('mongodb://admin:111111@localhost:27017/yourDB?authSource=admin');

關鍵參數 authSource=admin 告訴驅動程式去 admin 資料庫驗證帳號密碼。

方法二:使用選項物件

const options = {
  user: 'admin',
  pass: '111111',
  authSource: 'admin',  // 必須指定
  useNewUrlParser: true,
  useUnifiedTopology: true
};
mongoose.connect('mongodb://localhost:27017/yourDB', options);

使用者角色建議

為避免 listIndexes 等指令被拒,建議給予使用者 readWrite 或 dbOwner 角色於目標業務資料庫,並在 admin 資料庫建立使用者時賦予 userAdminAnyDatabase 或 root 角色(視安全需求而定)。

驗證步驟

  1. 在 Mongo Shell 中切換至 admin 資料庫:use admin
  2. 確認使用者存在:db.getUsers()
  3. 檢查角色是否包含目標資料庫的讀寫權限

常見誤區

  • 以為驗證通過即代表擁有所有權限,實則需針對各資料庫單獨授權。
  • 連線字串中資料庫名稱寫成 root 或 admin 而非實際業務資料庫。
  • Mongoose 版本過舊(< 4.2)不支援 authSource 參數,需升級。

依照上述設定調整後,即可解決「驗證成功但無權執行指令」的問題,實現穩定的生產環境連線。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved