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 })  
posted @ 2020-10-29 15:02  Devops达人  阅读(959)  评论(0编辑  收藏  举报