1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        NoSQL | MongoDB入門實戰(zhàn)教程(3)

        共 3887字,需瀏覽 8分鐘

         ·

        2021-07-14 20:39

        【NoSQL| 總結/Edison Zhou

        上一篇我們了解了MongoDB的復制集概念和復制集的搭建,本篇我們來了解一下如何實現數據恢復 和 提升安全性的一些實踐。

        1Mongo Tools實現數據恢復

        MongoDB 4.4之后,備份與恢復功能就和主版本分離開了,因此如果我們想要實現備份與恢復就需要獨立下載Tools包。

        下載地址:https://www.mongodb.com/try/download/database-tools

        這里,我們下載后將tgz包放到master節(jié)點下。

        配置Mongo Tools

        首先,解壓壓縮包并重命名,然后將其移動到指定目錄下:

        tar -zvxf mongodb-database-tools-rhel70-x86_64-100.3.1.tgzmv mongodb-database-tools-rhel70-x86_64-100.3.1 toolsmv tools /usr/local/mongodb

        然后,為tools在master節(jié)點下配置環(huán)境變量:

        Step1. 修改profile文件并刷新

        cat >>/etc/profile<<"EOF">export PATH=$PATH:/usr/local/mongodb/tools/bin>EOF
        source /etc/profile

        Step2. 修改.bashrc文件

        cat >>/root/.bashrc<<"EOF">export PATH="$PATH:/usr/local/mongodb/tools/bin">EOF

        測試數據恢復

        首先,下載測試數據備份dump:

        鏈接: https://pan.baidu.com/s/1wII6S_-ipup4nu9NDKlWcw 提取碼: ihjm

        其次,將其拷貝到master節(jié)點(因為我們只在master節(jié)點安裝了tools)并解壓:

        tar -zvxf mongodb-database-tools-rhel70-x86_64-100.3.1.tgz

        最后,在解壓的目錄下(我這里是/usr/local/mongodb/)執(zhí)行mongorestore:

        mongorestore -h mongo-master:27017

        執(zhí)行結果如下圖所示:

        可以看到,有100000條記錄成功恢復。

        我們也可以驗證一下:

        可以看到orders表已經恢復到mock數據庫中。

        此外,我們還可以使用mongo tools實現數據的備份,只需借助 mongodump 命令,示例如下:

        # 排除指定的集合mongodump  --db test --excludeCollection=users --excludeCollection=salaries# 指定ip,端口,用戶名,認證,壓縮,輸出目錄mongodump --host mongo-master --port 37017 --username user --password "pass" --gzip --out /opt/backup/mongodump-2020-05-17
        2提升安全性的實踐

        默認是無安全性的設置

        MongoDB默認的配置是無安全性的,用戶名密碼都不需要就可以直接連接。在默認模式下,一般不要開放外網連接端口,否則你的MongoDB很可能會被攻擊和刪庫。

        更改MongoDB默認端口

        MongoDB默認的端口是27017,一般線上環(huán)境都建議更改默認端口,比如改為20270,只需在mongodb.conf中配置即可。

        net:  bindIp: 0.0.0.0  port: 20270 # port

        MongoDB的用戶認證方式

        MongoDB提供了以下的用戶認證方式。

        本次我們實踐一下用戶名+密碼的認證方式來提高一點安全性。

        MongoDB的授權基于角色的權限控制,不同權限的用戶對數據庫的操作不同。這一點,跟傳統的關系型數據庫如MySQL、MSSQL沒有多大差異。

        Mongo集群節(jié)點的認證

        首先,我們需要配置一下Mongo集群節(jié)點的認證,目前有兩種認證方式。

        這里,我們采用第一種,即Keyfile的方式。

        Step1.在master節(jié)點上通過openssl生成Keyfile:

        mkdir /usr/local/mongodb/certscd /usr/local/mongodb/certsopenssl rand -base64 756 > mongo-repl-set.keychmod 400 mongo-repl-set.key

        Step2.將這個Keyfile復制到兩個slave節(jié)點上,文件目錄的組織可以保持一致。

        Step3.分別修改各個節(jié)點的mongodb.conf,添加security的配置:

        systemLog:  destination: file  path: /usr/local/mongodb/logs/mongodb.log # log path  logAppend: truestorage:  dbPath: /usr/local/mongodb/data # data directorynet:  bindIp: 0.0.0.0  port: 27017 # portsecurity:  #authorization: enabled  keyFile: /usr/local/mongodb/certs/mongo-repl-set.keyreplication:  replSetName: localrsprocessManagement:  fork: true

        然后,重新啟動這個復制集集群中的三個節(jié)點。

        創(chuàng)建認證用戶

        首先,MongoDB規(guī)定,創(chuàng)建的第一個用戶一定要在admin數據庫,并且角色是 userAdminAnyDatabase。

        use admindb.createUser({user:"admin",pwd:"yourpassword",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})

        創(chuàng)建完第一個用戶,就可以用這個用戶登錄并創(chuàng)建其他角色的用戶了。

        其次,創(chuàng)建一個集群的admin用戶:

        use admindb.auth("admin","yourpassword")db.createUser({user:"replicasAdmin",pwd:"yourpassword",roles:[{role:"clusterAdmin",db:"admin"}]})

        這時,你就可以用這個replicasAdmin用戶作為你的復制集的使用賬號了。

        對于生產環(huán)境,你還需要自定義一些角色并生成對應用戶來控制訪問權限,例如下面的授權:

        db.createRole(  {    role: 'sampleRole',    privileges: [{    resource: {      db: 'sampledb', collection: 'sample'    },    actions: ["update"]  }],  roles: [{    role: 'read',    db: 'sampledb'    }]  })db.createUser(  {    user: 'sampleUser',    pwd: 'password',    roles: [{role: 'sampleRole', db: 'admin'}]  }

        最后,你也可以創(chuàng)建一個root用戶,和Linux系統一樣,這是一個超級用戶賬號:

        use admindb.auth("admin","yourpassword")db.createUser({user:"root",pwd:"yourpassword",roles:[{role:"root",db:"admin"}]})

        當然,由于這個賬號權限太大,不建議分給應用程序層面(比如.NET或Java應用)進行聯接使用。

        重啟復制集集群

        將三個節(jié)點的mongodb.conf中的 security.authorization:true 的注釋去掉,重啟復制集:

        ......security:  authorization: enabled  keyFile: /usr/local/mongodb/certs/mongo-repl-set.key......
        End總結

        本文介紹了如何通過Mongo Tools實現數據恢復 和 提高安全性的一些實踐。

        下一篇,我們會學習MongoDB的基本操作和查詢。


        參考資料

        唐建法,《MongoDB高手課》(極客時間)

        郭遠威,《MongoDB實戰(zhàn)指南》(圖書)

        △推薦訂閱學習

        歡迎各位讀者加入微信群一起學習交流,
        在公眾號后臺回復“加群”即可~~


        瀏覽 96
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            欧美大黄片 | 欧美在线黑人无码 | 五月天三级| 女人把腿扒开让男人桶 | 免费精品一区二区三区视频日产 | 尽跟没入夹得好紧h | 婷婷六月色aV | 免费看男阳茎进女阳道120秒 | 69AV在线视频 | 91九色91蝌蚪91成人 |