文章目錄
- authSource
- 遇到的問題
authSource
MongoDB用戶認證邏輯與以往我認知的關系型數據庫邏輯不太一樣,多了一層用戶與數據庫關系的綁定。
-
在建立用戶時,需要先指定數據庫,則存在一個概念:用戶歸屬于數據庫。額外,依然是可以為用戶賦需要的權限,例如對某個數據庫具有讀、些權限。
-
在連接時,會根據請求中的authSource參數的值(數據庫)去校驗是否有這樣的用戶在該數據庫下。如果請求url中未攜帶authSource參數,則默認去找admin數據庫。
// 建立用戶
use admin // 在該數據庫下創建的用戶屬于該數據庫,連接時必須指定認證數據庫。在admin數據庫創建可以管理多個數據庫的用戶
db.createUser({user: "zyRW_admin_zy",pwd: "123456",roles: [{ role: "readWrite", db: "zy" }]
})// 賦權限
db.grantRolesToUser("zyRW", [{ role: "read", db: "local" }
])// 收回權限
db.revokeRolesFromUser("zyRW", [{ role: "read", db: "local" } // 刪除local庫的讀寫權限
])
遇到的問題
使用mongodb-driver-sync-4.2.1版本的驅動連接不同版本的Mongodb時:
當連接8.0版本的Mongodb時,若用戶歸屬于admin數據庫,authSource參數并未生效;
當連接8.0版本的Mongodb時,若用戶歸屬于zy數據庫,authSource參數生效; (結合上述測試,懷疑是先去admin數據庫找用戶,若未找到,則在參數配置的數據庫找用戶,待驗證)
當連接4.0版本的Mongodb時,無論用戶歸屬于什么數據庫,authSource參數均生效。
當給連接驅動升級到適配8.0版本的Mongodb時不存在該問題。