一小白瞎整mongodb,認證部分被折磨的慘不忍睹,看廝可憐,特查了一下文檔,淺顯地總結一下mongodb認證(authentication)與授權(authorization)的聯系。
創建的所有用戶都在admin.庫下的system.users集合下,有如下字段:

其中的db字段是用於authentication用的,也就是連接mongodb的時候,指定的--authenticationDatabase選項的值。
roles字段里面的db是指這個用戶具體對db具有什么樣的角色,是只讀,只寫,還是讀寫,也就是授權。這個db跟最外面的db沒有任何關系,完全是用來指定權限的。
連接Mongodb的時候,除了需要用戶名,密碼,還需要指定這個用戶的認證db。為什么需要指定這個認證db?是因為Mongodb允許存在多個同名的用戶存在,但同名的用戶認證db必須不能相同,如下:

切換到其他db,可以創建同名用戶:

上圖創建了一個用戶名密碼為"in_admin"的用戶,用haha數據庫認證,對haha數據庫具有讀寫權限,除此之外,沒有其他數據庫的任何執行權限。
補充一點就是,認證的db字段不能在創建用戶時指定,它的值是你創建用戶時所在的那個db。
