首先周拐,是我自己在遠程連接的時候遇到的坑,記錄一下凰兑,以后忘了能快速找到問題妥粟,同時能幫到其他人也是極好的;問題說到底比較小白聪黎,不需要的敬請諒解罕容。
關(guān)鍵字 : MongoDB 、 Docker 稿饰、 Linux
問題的出現(xiàn):
在項目中有在阿里云的 linux 系統(tǒng)中使用 docker 容器安裝了 mongodb 數(shù)據(jù)庫配合 mysql 數(shù)據(jù)庫使用锦秒,由于上一個搭建項目的程序猿跑路了(離職了),維護和修改就落在我手上了喉镰;但是在使用 mongodb 的時候并沒有設(shè)置用戶名和密碼旅择,在丟失了兩次數(shù)據(jù)庫的情況下決定給 mongodb 設(shè)置訪問權(quán)限。不會侣姆?看看這個大兄弟的文章吧(mongodb 容器設(shè)置 mongodb 訪問權(quán)限)[https://blog.csdn.net/weixin_44591832/article/details/91953189]生真,權(quán)限設(shè)置上了,但是連接不上捺宗,折騰了一陣柱蟀,連上了,發(fā)現(xiàn)是自己對 mongodb 權(quán)限的理解不夠清楚蚜厉,會錯意了长已,下面是干貨。
關(guān)于mongodb 權(quán)限的分析和理解:
首先回憶一下我們創(chuàng)建用戶設(shè)置密碼權(quán)限的時候都是在 admin 下進行的(很重要)昼牛,如下:
docker exec -it [mongodb 容器的 id] mongo admin // docker 容器進入 mongodb
db.createUser({user:'用戶名',pwd:'密碼',roles:[{role:'userAdminAnyDatabase',db:'admin'}]}); // 創(chuàng)建 admin 管理員帳號
db.createUser({user:'用戶名',pwd:'密碼',roles:[{role:'readWrite',db:'test'}]}); // 創(chuàng)建用戶和密碼(非管理員)术瓮,readWrite 賦予讀寫權(quán)限,db 是自己新建的數(shù)據(jù)庫
創(chuàng)建好之后贰健,我這里就會錯意了胞四,我以為這個用戶名和密碼就和數(shù)據(jù)庫是綁定在一起的,登錄的時候就該填這幾樣的東西 ? 就是這樣就這樣一直連接不上數(shù)據(jù)庫伶椿,其實這里就是誤區(qū)就是錯誤了辜伟,我不是以為綁定用戶名和密碼到 test 數(shù)據(jù)庫嗎氓侧,但是其實只是 操作權(quán)限 readWrite 需要登錄用戶和密碼才能操作,但是登錄的時候填寫的并不是操作的數(shù)據(jù)庫游昼,而是你創(chuàng)造你權(quán)限的數(shù)據(jù)庫甘苍,還記得上面有個很重要的 admin 嗎?操作權(quán)限都是在 admin 中創(chuàng)建的烘豌,所以登錄的時候那個 Authentication DB(權(quán)限數(shù)據(jù)庫)應(yīng)該填寫 admin 载庭,這個權(quán)限操作的是 test ,但是你這用戶的權(quán)限是屬于 admin 的廊佩。還有疑問的話就可以查看一下用戶:
我就是從查看用戶列表中意識到自己理解錯誤的囚聚,從紅色部分的可以看出來權(quán)限都是屬于 admin ,admin 這個 db 就是 Authentication DB标锄,所以登錄的時候我們應(yīng)該填寫黃色部分的用戶名+權(quán)限 db 然后再加上密碼就行了顽铸。
好了,就醬料皇,希望能夠幫到有需要的人谓松。