MongoDB 用戶名密碼登陸 認證登錄

MongoDB 用戶名密碼登陸

96 kimoCHG 關注html

 1.9 2017.01.07 23:44* 字數 1014 閱讀 58236評論 4喜歡 37mongodb

Mongodb enable authentication

MongoDB 默認直接鏈接,無須身份驗證,若是當前機器能夠公網訪問,且不注意Mongodb 端口(默認 27017)的開放狀態,那麼Mongodb就會產生安全風險,被利用此配置漏洞,入侵數據庫。數據庫

容易遭受入侵的環境

  • 使用默認 mongod 命令啓動 Mongodb
  • 機器能夠被公網訪問
  • 在公網上開放了 Mongodb 端口

安全風險

  • 數據庫隱私泄露
  • 數據庫被清空
  • 數據庫運行緩慢

解決方案

1. 禁止公網訪問 Mongodb 端口

1.1 網絡配置

因爲網絡配置因人而異,須要根據本身實際環境進行配置,不做冗述。大體能夠從如下方面禁止。安全

  • 在路由器中關閉端口轉發
  • 防火牆 iptables 禁止訪問

1.2 驗證端口可否訪問方式

在外網機器命令行中運行網絡

telnet your.machine.open.ip 27017

2. 啓用驗證

2.1 建立用戶管理員帳戶

當前數據庫版本: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

2.2 Mongodb 用戶驗證登錄

啓動帶訪問控制的 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 表示驗證成功

2.3 建立普通用戶

過程相似建立管理員帳戶,只是 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 庫沒有任何用戶的話,即便在其餘數據庫中建立了用戶,啓用身份驗證,默認的鏈接方式依然會有超級權限

2.4 內建角色

  • Read:容許用戶讀取指定數據庫
  • readWrite:容許用戶讀寫指定數據庫
  • dbAdmin:容許用戶在指定數據庫中執行管理函數,如索引建立、刪除,查看統計或訪問system.profile
  • userAdmin:容許用戶向system.users集合寫入,能夠找指定數據庫裏建立、刪除和管理用戶
  • clusterAdmin:只在admin數據庫中可用,賦予用戶全部分片和複製集相關函數的管理權限。
  • readAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的讀權限
  • readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的讀寫權限
  • userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的userAdmin權限
  • dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的dbAdmin權限。
  • root:只在admin數據庫中可用。超級帳號,超級權限

2.5 URI 形式的訪問

生產中經常使用 URI 形式對數據庫進行鏈接

mongodb://your.db.ip.address:27017/foo

添加用戶名密碼驗證

mongodb://simpleUser:simplePass@your.db.ip.address:27017/foo

參考連接

結語

在使用數據庫的過程當中,必定要注意安全風險,因爲 Mongodb 的默認配置,使得數據庫有入侵風險,應該予以防範。

沒錢的點個喜歡,有錢的捧個錢場!

讚揚支持

相關文章
相關標籤/搜索