mongodb 許可權設定

2021-08-10 12:57:56 字數 3061 閱讀 3605

一、關於許可權的預設配置

在預設情況下,mongod是監聽在0.0.0.0之上的,任何客戶端都可以直接連線27017,且沒有認證。這樣做的好處是,使用者可以即時上手,不用擔心被一堆配置弄的心煩意亂。然而壞處也是顯而易見,如果直接在公網伺服器上如此搭建mongodb,那麼所有人都可以直接訪問並修改資料庫資料了。

預設情況下,mongod也是沒有管理員賬戶的。因此除非你在admin資料庫中使用db.adduser()命令新增了管理員帳號,且使用–auth引數啟動mongod,否則在資料庫中任何人都可以無需認證執行所有命令。包括delete和shutdown。

此外,mongod還會預設監聽28017埠,同樣是繫結所有ip。這是乙個mongod自帶的web監控介面。從中可以獲取到資料庫當前連線、log、狀態、執行系統等資訊。如果你開啟了–rest引數,甚至可以直接通過web介面查詢資料,執行mongod命令。

其實mongodb本身有非常詳細的安全配置準則,顯然開發者也是想到了,然而他是將安全的任務推給使用者去解決,這本身的策略就是偏向易用性的,對於安全性,則得靠邊站了。

二、mongodb使用者型別

mongodb的使用者分為兩種,一種是admin使用者,另一種是特定資料庫使用者。admin使用者擁有最高的許可權,而特定資料庫使用者則只能訪問特定的資料庫。當mongodb的admin庫里沒有任何使用者的時候,也就是說整個mongodb沒有乙個mongodb使用者的時候,即便–auth許可權需求開啟了,使用者還是可以通過localhost介面進入mongodb進行使用者設定,否則的話整個mongodb就完全沒法訪問了。而當這個使用者建立完成之後,之後的使用者登入和操作就需要授權了,不是直接登入就能使用的了。

mongodb有乙個比較奇怪的設定是,即便是乙個admin使用者,授權也必須在admin資料庫下進行,而不能在其他資料庫下進行。而授權之後admin使用者就可以在任何資料庫下進行任何操作了。當然資料庫級別的使用者在他自己的資料庫下授權之後是不能到其他資料庫進行操作的。舉例來說:

> use test

> db.auth(「someadminuser」, password)

操作失敗,提示還沒有在admin資料庫下對afmin使用者進行授權。

三、操作例項

啟動mongodb,在cmd命令框裡進入資料庫的bin目錄;

2. 輸入命令:use admin,你會發現該db下包含了乙個名為system.user的collection,這是使用者表,用來存放超級管理員的

備註:本文使用的資料庫版本是2.0.1,沒有預設的admin資料庫,但是在執行第二步之後自動建立了乙個admin庫; 當然也沒有預設的system.user表,執行後面的第三步後會自動建立 system.user和system.indexes )

3. 輸入命令:db.adduser('root','root'),這裡我新增乙個超級管理員使用者,username為root,password也為root。先退出 (ctrl+c)程式,測試重啟服務後再次連線mongodb是否需要按提示輸入使用者名稱、密碼進行操作。

4. 輸入命令:use admin

5. 輸入命令:show collections,檢視該庫下所有的表,你會發現,mongodb並沒有提示你輸入使用者名稱、密碼,原因是,在文章最開始提到了,mongodb預設設定為無許可權訪問限制,我們需要先把它設定成為需要許可權訪問

6.從新開啟cmd,在mongodb路徑的bin目錄下,執行mongod --dbpath  d:\work\data\mongodb\db  --auth

7. 輸入命令:use admin

顯然,已經提示沒有許可權;用剛才設定的使用者名稱、密碼來訪問集合

9. 輸入命令:db.auth(「root」,」root」),輸出乙個結果值為1,說明這個使用者匹配上了,如果使用者名稱、密碼不對,輸出為0

10. 輸入命令:show collections,將成功顯示結果

繼續操作,可以訪問已經存在的資料庫,但對於新建的資料庫仍然沒有許可權;繼續操作,先退出(ctrl+c)服務

11. 輸入命令:mongo testdb

13. 輸入命令:db.auth(「root」, 「root」),輸出結果為0,說明使用者名稱或者密碼有問題,剛剛前面才建立,怎麼會不對呢?原因在於:當我們單獨訪問mongodb的資料庫時,需要許可權訪問的情況下,使用者名稱密碼並非超級管理員,而是該庫的system.user表中的使用者,注意,我這裡說的是單獨訪問的情況,什麼是不單獨訪問的情況呢?後面再講。針對上述情況,接下來操作:

14. 輸入命令:db.adduser('test','111111'),仍然提示沒有許可權,新的資料庫使用超級管理員也無法訪問,建立使用者也沒有許可權,不過即然設定了超級管理員使用者,那它就一定有許可權訪問所有的庫

15. 輸入命令:use admin

16. 輸入命令:db.auth(「root」, 「root」)

17. 輸入命令:use testdb

18. 輸入命令:show collections,之後可以利用超級管理員使用者訪問其它庫了,這個就是不單獨訪問的情況。在上述操作過程中,我們是先進入admin庫,再轉到其它庫來的,admin相當於是乙個最高端別使用者所在的區域,對資料庫操作,需要經過最高端別使用者,之後可以建立每個資料庫的使用者。

19. 輸入命令:db.adduser('test','12345'),我們給testdb庫新增乙個使用者,以後每次訪問該庫,我都使用剛剛建立的這個使用者,我們先退出(ctrl+c)

20. 輸入命令:mongo testdb

21. 輸入命令:show collections,提示沒有許可權

22. 輸入命令:db.auth('test','12345'),輸出結果1,使用者存在,驗證成功

23. 輸入命令:show collections,成功顯示結果

四、啟動和關閉mongodb的各種引數

詳見:比如要改變mongodb的預設埠,則可以這樣使用--port引數:

開啟cmd,在mongodb路徑的bin目錄下,執行mongod --port 50107 --dbpath  d:\work\data\mongodb\db  --auth

這樣訪問mongodb就是以50107的埠訪問了

MongoDB設定訪問許可權 設定使用者

mongodb已經使用很長一段時間了,基於mongodb的資料儲存也一直沒有使用到許可權訪問 mongodb預設設定為無許可權訪問限制 今天特地花了一點時間研究了一下,研究成果如下 注 研究成果基於windows平台 mongodb在本機安裝部署好後 2.輸入命令 use admin,你會發現該db...

MongoDB設定訪問許可權 設定使用者

mongodb已經使用很長一段時間了,基於mongodb的資料儲存也一直沒有使用到許可權訪問 mongodb預設設定為無許可權訪問限制 今天特地花了一點時間研究了一下,研究成果如下 注 研究成果基於windows平台 mongodb在本機安裝部署好後 2.輸入命令 use admin,你會發現該db...

MongoDB設定訪問許可權 設定使用者

mongodb已經使用很長一段時間了,基於mongodb的資料儲存也一直沒有使用到許可權訪問 mongodb預設設定為無許可權訪問限制 今天特地花了一點時間研究了一下,研究成果如下 注 研究成果基於windows平台 mongodb在本機安裝部署好後 2.輸入命令 use admin,你會發現該db...