2018年06月08日 10:22:47 Liu-YanLin 閱讀數:16801mongodb
原文轉載地址:https://blog.csdn.net/singgel/article/details/79407774數據庫
MongoDB 默認直接鏈接,無須身份驗證,若是當前機器能夠公網訪問,且不注意Mongodb 端口(默認 27017)的開放狀態,那麼Mongodb就會產生安全風險,被利用此配置漏洞,入侵數據庫。安全
因爲網絡配置因人而異,須要根據本身實際環境進行配置,不做冗述。大體能夠從如下方面禁止。網絡
在外網機器命令行中運行函數
spatelnet your.machine.open.ip 27017
當前數據庫版本:Mongodb 3.4.net
使用 mongod 啓動數據庫
新建終端命令行
mongod --port 27017 --dbpath /data/db1
參數默承認以不加,如有自定義參數,纔要加上,下同。code
另起一個終端,運行下列命令blog
mongo --port 27017
use admin
db.createUser(
{
user: "adminUser",
pwd: "adminPass",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
管理員建立成功,如今擁有了用戶管理員
用戶名:lyl
密碼:123456
而後,斷開 mongodb 鏈接, 關閉數據庫
兩個終端下 <C - c>
啓動帶訪問控制的 Mongodb
新建終端
mongod --auth --port 27017 --dbpath /data/db1
如今有兩種方式進行用戶身份的驗證
第一種 (相似 MySql)
客戶端鏈接時,指定用戶名,密碼,db名稱
mongo --port 27017 -u "lyl" -p "123456" --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://simpleUser:simplePass@your.db.ip.address:27017/foo