MongoDB 預設是沒有賬号的,可以直接連接配接,無須身份驗證。實際項目中肯定是要權限驗證的,否則 後果不堪設想。是以對MongoDB進行安全認證 是必須要做的。
為了能保障mongodb的安全可以做以下幾個步驟:
1、使用新的端口,預設的27017端口如果一旦知道了ip就能連接配接上,不太安全
2、設定mongodb的網絡環境,最好将mongodb部署到公司伺服器内網,這樣外網是通路不到的。
3、開啟安全認證。認證要同時設定伺服器之間的内部認證方式,同時要設定用戶端連接配接到叢集的賬号密碼認證方式
環境準備
最簡單的叢集是3*3,即三個分片和三個副本集,可以保證高可用,即使一台機器全當機了,服務仍然能夠正常通路。
use admin;
db.createUser(userDocument):用于建立 MongoDB 登入使用者以及配置設定權限的方法
user:建立的使用者名稱,如 admin、root 、lagou
pwd:使用者登入的密碼
roles:為使用者配置設定的角色,不同的角色擁有不同的權限,參數是數組,可以同時設定多個
role:角色,MonngoDB 已經約定好的角色,不同的角色對應不同的權限
db:資料庫執行個體名稱,如 MongoDB 4.0.2 預設自帶的有 admin、local、config、test 等,即為哪個資料庫執行個體設定使用者
建立 mydb1 資料庫并建立了兩個使用者,zhangsan 擁有讀寫權限,lisi 擁有隻讀權限測試這兩個賬戶的權限。
以超級管理者登入測試權限。
MongoDB 服務端開啟安全檢查之前,至少需要有一個管理者賬号,admin 資料庫中的使用者都被視為管理者
如果 admin 庫沒有任何使用者的話,即使在其他資料庫中建立了使用者,啟用身份驗證,預設的連接配接方式依然會有超級權限,即仍然可以不驗證賬号密碼照樣能進行 CRUD,安全認證相當于無效。
如下所示 rpp_resume 是自己建立的資料庫,沒安全認證之前可以随意 CRUD,其餘的都是 mongoDB4.0.2 自帶的資料庫
為 admin 庫建立管理者之後,現在來為普通資料庫建立普通使用者,以 rpp_resume 為例,方式與建立管理者一緻,切換到指定資料庫進行建立即可。
如下所示,為 rpp_resume 資料庫建立了兩個使用者,zhangsan 擁有讀寫權限,lisi 擁有隻讀權限,密碼 都是 123456.
接着從用戶端關閉 MongoDB 服務端,之後以安全認證方式進行啟動
普通使用者現在仍然像以前一樣進行登入,如下所示直接登入進入 rpp_resume 資料庫中,登入是成功的,隻是登入後日志少了很多東西,而且執行 show dbs 指令,以及 show tables 等指令都是失敗的,即使沒有被安全認證的資料庫,使用者同樣操作不了,這都是因為權限不足,一句話:使用者隻能在自己權限範圍 内的資料庫中進行操作
如下所示,登入之後必須使用 db.auth(“賬号”,“密碼”) 方法進行安全認證,認證通過,才能進行權限範圍内的操作
用戶端管理者登入如下所示,管理者 root 登入,安全認證通過後,擁有對所有資料庫的所有權限。
參考上面的單機安全認證實作流程
可以編寫一個shell 腳本 批量啟動