MongoDB(3.6.3)的使用者認證初識

來源:互聯網
上載者:User

標籤:方式   環境變數   ica   The   cti   mil   機制   com   前言   

Windows 10家庭中文版,MongoDB 3.6.3,

 

前言

剛剛安裝好了MongoDB,啟動了伺服器-mongod命令,啟動了MongoDB shell-mongo命令,不過,全程都沒有使用username、password!震驚!

原來,MongoDB預設是沒有使用者認證的,也沒有預設使用者,因此,都需要自己添加——安全全權交給使用者自己負責

不過,MongoDB裡面是有強大且完備(浮誇了點,但一定是這樣的,還要去瞭解一下去年還是什麼時候發生的大量MongoDB被黑敲詐比特幣的事件)的安全機制的,對於使用者認證來說,目前孤所知的是可以做下面的事情(實際上還可以做更多):

-啟動MongoDB服務時使用--auth啟動使用者認證(只是啟動這個嗎)

-使用db.createUser(...)添加使用者

 

本文介紹了如何開啟MongoDB的安全認證、如何添加一個使用者到MongoDB的過程,因為第一天玩MongoDB,所以,不會更多深入。

 

說明,孤的MongoDB的bin目錄已經添加到環境變數path中。

 

開啟MongoDB安全認證

開啟終端,執行下面的命令查看mongod的使用資訊:

>mongod --help

可以看到General options下有一個--auth選項,介紹時run with security,在孤目前的理解來看,就是開啟MongoDB的安全認證,其中包括使用者認證,當然,還可能有其它認證方式。

 

建立檔案夾mdb2dir(空白),並基於它啟動MongoDB服務:使用了--auth,開啟了安全認證

 

不過,此時MongoDB資料庫中是沒有使用者資訊的,因此,任何用戶端都不能訪問MongoDB伺服器。使用mongo命令可以串連上,但執行命令時會提示認證錯誤。

 

此時使用db.auth(...)加各種參數也無法成功完成認證:

 

怎麼辦?添加使用者先!

 

關掉MongoDB服務,重新使用沒有--auth選項的非安全方式啟動(第二行):

 

----

 

說明,啟動mongo shell的輸出資訊只有3行,這比MongoDB沒有開啟安全認證時的輸出資訊少太多了,對比下:

 

說明,在上面的啟動中,使用了日誌記錄功能,因此,可以通過記錄檔查看操作過程中發生的事項(哪些日誌要被記錄、什麼層級才被記錄、怎麼控制日誌格式……需要看更多資料才行)。

 

添加使用者到MongoDB

怎麼添加MongoDB使用者呢?看了兩篇博文——一篇14年的、一篇17年的,使用db.addUser(...)添加使用者。好,結果,孤的MongoDB 3.6.3已經不支援這個命令了。

使用db.help()可以看到其中有一個db.createUser(...)命令:

db.createUser(userDocument)

看時看到了,可什麼事userDocument?怎麼用這個命令呢?此時,mongo shell無法協助孤擷取更多這個函數的使用資訊了!

又看了一遍mongo shell命令和db.help()下的命令,沒有辦法知道這個函數的用法。

那麼,去官網找吧,更快的應該是用搜尋引擎找——然後到官網。

 

官文Enable Auth正是孤想要的(尚未細看,就看了Create the user administrator小節,不過足夠添加一個使用者了,居然還涉及到角色):

 

上面是官文的樣本,從結構來看,上面的語句是寫到某種指令檔中的,然後再執行指令碼(JavaScript指令碼?怎麼執行?mongo的命令中有一個選項執行.js檔案~)。

 

是自己添加使用者的:

第一次只用了user、pwd,結果失敗,提示要roles;

第二次添加成功了,新使用者 名為sa,角色為userAdminAnyDatabase(孤還以為這個角色是任何資料庫都可以訪問的呢,結果卻並非如此);

 

已經添加了sa使用者,來驗證一下:關閉mongo shell、MongoDB伺服器,重新使用--auth選項開啟MongoDB伺服器,再使用mongo shell串連MongoDB伺服器。

 

使用sa帳號完成認證,執行一些操作的結果如下:原來角色為userAdminAnyDatabase的使用者sa並不是萬能的

-預設的mongo shell的db顯示為test(這個test是什嗎?有什麼用?不是資料庫的啊!),故認證失敗

-切換到admin資料庫,sa帳號認證成功

-可以執行show dbs命令,,但是,切換到local資料庫時執行失敗(此問題和角色有關係,也說明自己對MongoDB的這套使用者權限機制不熟悉)

-在local資料庫下,認證也失敗,邏輯正確

-在資料庫admin執行show collections失敗(不應該的啊!)

 

說明,userAdminAnyDatabase角色從名字上看,是建立管理員權限的帳號並可以訪問任何資料庫,可在上面的操作中,基於它的使用者sa並沒有實現孤的預期,甚至在admin資料庫中執行show collections都失敗——不應該啊!不是有這個許可權嗎?

 

官文Built-In Roles中有對userAdminAnyDatabase的詳細介紹,開始就說了,基於它角色的使用者不可以訪問local、config兩個資料庫(難道show collections的資料涉及到了這兩個資料庫?):

 

看來,需要認真看下MongoDB的使用者權限管理相關官文才可以徹底瞭解。

 

參考連結

mongodb 使用權限設定--使用者名稱、密碼、連接埠(by 園友 luck_mylife)

官文Enable Auth

官文Built-In Roles

 

後記

MongoDB的安全機制到底是怎樣的?怎麼合理地建立使用者?角色也可以建立吧?

怎麼建立一個超級使用者?可以用它訪問所有功能——當然是不安全的!

怎麼建立資料庫?mongo shell中沒找到,只有clone、copy、repair、drop資料庫的操作。

建立 記錄集(表):db.createCollection

添加 記錄?

刪除 記錄?

修改 記錄?

尋找 記錄集 中的 對象(記錄?):find()或find(...)

 

對了,MongoDB使用者怎麼 修改?刪除有一個dropUser(...)函數。

 

繼續dig!

 

P.S.本文的幹活好像並不是很多的啊!請讀者見諒!

 

MongoDB(3.6.3)的使用者認證初識

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.