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 })