首先,是我自己在遠程連接的時候遇到的坑,記錄一下,以后忘了能快速找到問題,同時能幫到其他人也是極好的;問題說到底比較小白,不需要的敬請諒解。
關(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ù)庫)應該填寫 admin ,這個權(quán)限操作的是 test ,但是你這用戶的權(quán)限是屬于 admin 的。還有疑問的話就可以查看一下用戶:
我就是從查看用戶列表中意識到自己理解錯誤的,從紅色部分的可以看出來權(quán)限都是屬于 admin ,admin 這個 db 就是 Authentication DB,所以登錄的時候我們應該填寫黃色部分的用戶名+權(quán)限 db 然后再加上密碼就行了。
好了,就醬,希望能夠幫到有需要的人。