Mongodb部署的兩種方式


一、利用Docker部署

Redis、Mongdb、MySQL等數據庫必須開認證策略,以防被人攻擊破壞。

1、Docker版部署

因早期Mongodb默認不開啟認證策略,很多Mongdb數據庫被攻擊,后期官方對認證策略進行了增強。

經實際驗證MONGO_INITDB_ROOT_USERNAME和MONGO_INITDB_ROOT_PASSWORD這兩個參數,只有在Mongodb版本為3.6.20以上才生效,故使用Docker版Mongdb必須要用新版本才行(3.6.20以上)。

2、 啟動命令如下:

 docker run -d  -p 27017:27017 --name mongo_huadong     -e MONGO_INITDB_ROOT_USERNAME=mongoadmin     -e MONGO_INITDB_ROOT_PASSWORD=Yimi@2018 -v 
/data/mongo_huadong/db:/data/db     mongo:3.6.20

3、 新增用戶

use admin;
db.createUser( {
 user: "admin",
 pwd: "123456",
 roles: [ {
            "role" : "userAdminAnyDatabase",
            "db" : "admin"
        }, 
        {
            "role" : "readWriteAnyDatabase",
            "db" : "admin"
        }, 
        {
            "role" : "dbAdminAnyDatabase",
            "db" : "admin"
        } ]
});

4、 驗證

use admin;
db.auth('admin', '123456')

返回1 即為驗證成功

二、利用YUM安裝

早期的Mongdb開啟認證策略比較麻煩:先添加用戶,再修改配置文件開啟用戶認證,再重啟mongo服務(或者 添加用戶后,用mongod --auth命令啟動)。

鑒於Docker中的進程不能關閉,也就是mongodb沒發再容器里重啟,所以低版本mongodb不建議用Docker安裝

1、增加yum源

cat >> /etc/yum.repos.d/mongodb-org-3.2.repo << EOF
[mongodb-org-3.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.2.asc
EOF

2、安裝指定版本Mongdb

sudo yum install -y mongodb-org-3.2.22 mongodb-org-server-3.2.22 mongodb-org-shell-3.2.22 mongodb-org-mongos-3.2.22 mongodb-org-tools-3.2.22

3、啟動

sudo service mongod start

4、增加用戶

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

5、修改配置文件打開認證

vim /etc/mongod.conf 
security:
  authorization: enabled

6、重啟Mongdb

sudo service mongod restart

7、進行驗證

use admin;
db.auth('admin', '123456')

返回1 即為驗證成功

8、報錯解決

如果賬號密碼正確還是認證失敗,客戶端連接不上,建議觀察日志,比如:

SCRAM-SHA-1 authentication failed ``for` `user1 on finddemo

這是因為 mongodb加入了SCRAM-SHA-1校驗方式,需要第三方工具配合進行驗證。

首先關閉認證,修改system.version文檔里面的authSchema版本為3,初始安裝時候應該是5。

> use admin 
switched to db admin 
>  var schema = db.system.version.findOne({"_id" : "authSchema"}) 
> schema.currentVersion = 3 
3 
> db.system.version.save(schema) 
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM