首頁>技術>

MongoDB 作為時下最為熱門的資料庫,其安全驗證也是必不可少的,否則一個沒有驗證的資料庫暴露出去,任何人可隨意操作,這將是非常危險的。不信請看以下各網友們的慘痛經歷,你就明白了。

  之所以會發生這些攻擊,是因為 MongoDB 資料庫其安全性並不高,且沒有做好安全認證及資料備份導致的。但是反過來看,這也意味著通過幾個簡單的步驟,就可以輕鬆防止這些攻擊。防止這類攻擊最有效的辦法就是啟用身份驗證不允許遠端訪問或者新增 IP 訪問限制。接下來我們就一起學習一下如何透過 身份驗證 來進行對 MongoDB 的訪問,從而解決以上問題的產生。

  關於 MongoDB 更多的內容請閱讀《分散式檔案儲存資料庫 MongoDB》。

MongoDB 使用者與許可權管理常用許可權

許可權說明read允許使用者讀取指定資料庫。readWrite允許使用者讀寫指定資料庫。dbAdmin允許使用者在指定資料庫中執行管理函式,如索引建立、刪除,檢視統計或訪問 system.profile。userAdmin允許使用者向 system.users 集合寫入,可以在指定資料庫裡建立、刪除和管理使用者。clusterAdmin必須在 admin 資料庫中定義,賦予使用者所有分片和複製集相關函式的管理許可權。readAnyDatabase必須在 admin 資料庫中定義,賦予使用者所有資料庫的讀許可權。readWriteAnyDatabase必須在 admin 資料庫中定義,賦予使用者所有資料庫的讀寫許可權。userAdminAnyDatabase必須在 admin 資料庫中定義,賦予使用者所有資料庫的 userAdmin 許可權。dbAdminAnyDatabase必須在 admin 資料庫中定義,賦予使用者所有資料庫的 dbAdmin 許可權。root必須在 admin 資料庫中定義,超級賬號,超級許可權。

建立管理使用者

  MongoDB 有一個使用者管理機制,簡單描述為管理使用者組,這個組的使用者是專門為管理普通使用者而設的,暫且稱之為管理員。

  管理員通常沒有資料庫的讀寫許可權,只有操作使用者的許可權,我們只需要賦予管理員 userAdminAnyDatabase角色即可。另外管理員賬戶必須在 admin 資料庫下建立。

  由於使用者被建立在哪個資料庫下,就只能在哪個資料庫登入,所以把所有的使用者都建立在 admin 資料庫下。這樣我們切換資料庫時就不需要頻繁的進行登入了。

  先 use admin 切換至 admin 資料庫進行登入,登入後再 use 切換其他資料庫進行操作即可。第二次的 use 就不需要再次登入了。MongoDB 設定 use 第二個資料庫時如果登入使用者許可權比較高就可以直接操作第二個資料庫,而不需要登入。

切換資料庫

  管理員需要在 admin 資料庫下建立,所以我們需要先切換至 admin 資料庫。

檢視使用者

  透過 db.system.users.find() 函式檢視 admin 資料庫中的所有使用者資訊。

  目前 admin 資料庫中並沒有使用者,所以查無結果。

建立使用者

  在 MongoDB 中可以使用 db.createUser({使用者資訊}) 函式建立使用者。

1、db.createUser({ 2、 user: "<name>", 3、 pwd: "<cleartext password>", 4、 customData: { <any information> }, 5、 roles: [ 6、{ role: "<role>", db: "<database>" } | "<role>", 7、 ... 8、 ] 9、});

user:使用者名稱pwd:密碼customData:存放使用者相關的自定義資料,該屬性也可忽略roles:陣列型別,配置使用者的許可權

  示例如下:

`1db.createUser({user:"uaad",pwd:"uaad",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})

重啟服務

  管理員賬戶建立完成以後,需要重新啟動 MongoDB,並開啟身份驗證功能。

  先透過 db.shutdownServer() 函式關閉服務。

  本文是透過指定配置檔案的方式啟動的 MongoDB,所以修改配置資訊,啟用身份驗證功能,然後重啟服務。完整配置資訊如下:

| # 資料檔案存放目錄 dbpath = /usr/local/mongodb/data/db

日誌檔案存放目錄

logpath = /usr/local/mongodb/logs/mongodb.log

以追加的方式記錄日誌

logappend = true

埠預設為 27017

port = 27017

以守護程序的方式啟用,即在後臺執行

fork = true

對訪問 IP 地址不做限制

bind_ip = 0.0.0.0

啟動身份驗證

auth = true | | | ------------------------------------------------------------ | ---- | | | |

身份認證

  重啟服務以後切換至 admin 資料庫,此時再透過 db.system.users.find() 函式或者 show users 檢視 admin 資料庫中的所有使用者資訊時,就會返回以下資訊。

  使用認證函式 db.auth("使用者名稱", "密碼") 進行身份認證。返回結果 1,則表示認證成功,返回 0 則表示認證失敗。

  登入成功以後即可進行該使用者所擁有的角色對應的許可權的其他操作,比如 show users 再次檢視所有使用者資訊。

建立普通使用者

  需求:建立一個 test 資料庫,給這個資料庫新增一個使用者,使用者名稱為 testuser,密碼為 123456。並授予該使用者對 test 資料庫的讀寫操作許可權。

管理員登入資料庫

  普通使用者需要由管理員使用者建立,所以先使用管理員使用者登入資料庫。

7
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Quartz.NET一個優秀的作業排程框架