kimoCHG 關注html
1.9 2017.01.07 23:44* 字數 1014 閱讀 58236評論 4喜歡 37mongodb
MongoDB 默認直接鏈接,無須身份驗證,若是當前機器能夠公網訪問,且不注意Mongodb 端口(默認 27017)的開放狀態,那麼Mongodb就會產生安全風險,被利用此配置漏洞,入侵數據庫。數據庫
因爲網絡配置因人而異,須要根據本身實際環境進行配置,不做冗述。大體能夠從如下方面禁止。安全
在外網機器命令行中運行網絡
telnet your.machine.open.ip 27017
當前數據庫版本:Mongodb 3.4函數
使用 mongod 啓動數據庫
新建終端ui
mongod --port 27017 --dbpath /data/db1
參數默承認以不加,如有自定義參數,纔要加上,下同。spa
另起一個終端,運行下列命令命令行
mongo --port 27017 use admin db.createUser( { user: "adminUser", pwd: "adminPass", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
管理員建立成功,如今擁有了用戶管理員
用戶名:adminUser
密碼:adminPass
而後,斷開 mongodb 鏈接, 關閉數據庫
兩個終端下 <C - c>code
啓動帶訪問控制的 Mongodb
新建終端
mongod --auth --port 27017 --dbpath /data/db1
如今有兩種方式進行用戶身份的驗證
第一種 (相似 MySql)
客戶端鏈接時,指定用戶名,密碼,db名稱
mongo --port 27017 -u "adminUser" -p "adminPass" --authenticationDatabase "admin"
第二種
客戶端鏈接後,再進行驗證
mongo --port 27017 use admin db.auth("adminUser", "adminPass") // 輸出 1 表示驗證成功
過程相似建立管理員帳戶,只是 role 有所不一樣
use foo db.createUser( { user: "simpleUser", pwd: "simplePass", roles: [ { role: "readWrite", db: "foo" }, { role: "read", db: "bar" } ] } )
如今咱們有了一個普通用戶
用戶名:simpleUser
密碼:simplePass
權限:讀寫數據庫 foo, 只讀數據庫 bar。
注意
NOTE
WARN
use foo
表示用戶在 foo 庫中建立,就必定要 foo 庫驗證身份,即用戶的信息跟隨隨數據庫。好比上述 simpleUser 雖然有 bar 庫的讀取權限,可是必定要先在 foo 庫進行身份驗證,直接訪問會提示驗證失敗。
use foo db.auth("simpleUser", "simplePass") use bar show collections
還有一點須要注意,若是 admin 庫沒有任何用戶的話,即便在其餘數據庫中建立了用戶,啓用身份驗證,默認的鏈接方式依然會有超級權限
生產中經常使用 URI 形式對數據庫進行鏈接
mongodb://your.db.ip.address:27017/foo
添加用戶名密碼驗證
mongodb://simpleUser:simplePass@your.db.ip.address:27017/foo
在使用數據庫的過程當中,必定要注意安全風險,因爲 Mongodb 的默認配置,使得數據庫有入侵風險,應該予以防範。
沒錢的點個喜歡,有錢的捧個錢場!
讚揚支持