暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MongoDB Enterprise4.4.2部署和原生TDE加密配置

原创 DonACE 2021-04-30
1956

一、MogoDB4.4.2企业版部署

1.下载企业版MongoDB安装RPM包
–https://www.mongodb.com/download-center/enterprise
https://www.mongodb.com/download-center/enterprise/releases

社区版:http://mirrors.aliyun.com/mongodb/yum/redhat/6Server/mongodb-org/

2.安装MogoDB4.4.2企业版
检查依赖包
rpm -qa|grep net-snmp
1、如果没有需要安装依赖包
net-snmp-5.7.2-43.el7.x86_64.rpm
net-snmp-agent-libs-5.7.2-43.el7.x86_64.rpm
如果能够联网则可以直接
yum -y install net-snmp

安装MongoDB RPM包
安装顺序如下
rpm -ivh mongodb-enterprise-server-4.4.2-1.el6.x86_64.rpm
rpm -ivh mongodb-enterprise-mongos-4.4.2-1.el6.x86_64.rpm
rpm -ivh mongodb-enterprise-shell-4.4.2-1.el6.x86_64.rpm
rpm -ivh mongodb-enterprise-cryptd-4.4.2-1.el6.x86_64.rpm

3.启动并登录MongoDB
1、配置MongoDB
ls /etc/mongod.conf


mongod.conf

for documentation of all options, see:

http://docs.mongodb.org/manual/reference/configuration-options/

where to write logging data.

systemLog:
destination: file
logAppend: true
path: /opt/mongodb/log/mongod.log

Where and how to store data.

storage:
dbPath: /opt/mongodb/data
journal:
enabled: true

engine:

wiredTiger:

how the process runs

processManagement:
fork: true # fork and run in background
pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
timeZoneInfo: /usr/share/zoneinfo

network interfaces

net:
port: 27017
bindIp: 0.0.0.0 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.

#security:

#operationProfiling:

#replication:

#sharding:

Enterprise-Only Options

#auditLog:

#snmp:

security:
enableEncryption: true
encryptionKeyFile: /opt/mongodb/key/mongodb-keyfile


4.常用操作
设置MongoDB的管理员密码
创建数据库
use admin
db.createUser({ user: “admin”, pwd: “admin”, roles: [{ role: “userAdminAnyDatabase”, db: “admin” }] })
##验证登录,如果返回1,则证明密码生效

db.auth(“admin”, “admin”)
1
创建一个db库test,并分配账号和密码****
#登录管理员
use admin
db.auth(“admin”,“admin”)
#创建test库
use test
db.createUser({ user: “test”, pwd: “test”, roles: [{ role: “dbOwner”, db: “test” }] })

switched to db test

db.firstCollection.save({“name”:“yzh”,“age”:“25”})
WriteResult({ “nInserted” : 1 })
db.firstCollection.find({name:“yzh”})
{ “_id” : ObjectId(“5de12c9c771bf721cc7a0b07”), “name” : “yzh”, “age” : “25” }

忘记密码的处理方式
use dbname
db.auth(“username”,“password”)
Error: Authentication failed.
0
提示:密码错误,已经忘记密码

1.注释掉认证配置
vi /etc/mongod.conf
将以下两行注释掉

security:
authorization: enabled
#security:
#authorization: enabled
2.修改密码
此时使用库就不需要进行账户,密码验证了

mongo --host IP
use dbname
db.changeUserPassword(“username”,“password”)
修改配置文件/etc/mongod.conf取消注释
重启
/etc/init.d/mongod reload

3.登录验证

mongo --host IP
use dbname
db.auth(“username”,“new-password”)
1
提示1,证明新密码修改成功。

----------------日常维护-------------------------------
–启动MongDB
mongod -f /etc/mongod.conf
–关闭MongDB
mongod -f /etc/mongod.conf --shutdown
本地连接登录
mongo

查看数据库版本
db.version()

查看数据库状态
db.stats()
查看所有数据库
show dbs
查看当前数据库
db
db.getName()

查看当前数据库的所有集合(表的概念)
show collections

基本管理命令
1、show users; // 查看当前库下的用户
2、db.dropUser(“eggadmin”) // 删除用户
3、db.updateUser(“admin”,{pwd:“password”}); // 修改用户密码
4、db.auth(“admin”,“password”); // 密码认证 (数据库设置了密码,要认证后才能连接成功)
5、show tables // 列出该库下所有表

------------数据操作---------------------------------
MongoDB 创建数据库

use DATABASE_NAME
如果数据库不存在,则创建数据库,否则切换到指定数据库

use jm

创建集合

方法1:

use banana;
switched to db banana #相当于use banana ,不同的是(从mysql关系型数据库角度解释),在mongodb中banana允许未创建情况下use banana,在创建数据表后,即创建了banana,否则banana不会创建
db.createCollection(‘a’); #创建集合a,a相当于mysql中的数据表
{ “ok” : 1 } # 提示创建成功
db.createCollection(‘b’);
{ “ok” : 1 }
show collections;
a
b

方法2:

db.c.insert({username:“mongodb”}) #向c集合插入数据
WriteResult({ “nInserted” : 1 }) ->成功写入文档

show collections
a
b
c
db.c.find() #显示数据集合中所有数据,当前仅一条
{ “_id” : ObjectId(“5743c9a9bf72d9f7b524713d”), “username” : “mongodb” }
db.log.find().pretty(); # 格式化打印结果
{
“_id” : ObjectId(“5743c9a9bf72d9f7b524713d”),
“uid” : 0,
“name” : “mongodb”,
“age” : 6,
“date” : ISODate(“2018-01-03T08:37:00.214Z”)
}

db.c.drop() #删除c集合
true
db.c.find() #c集合置空

批量插入数据

for(i=0;i<10000;i++){ db.log.insert({“uid”:i,“name”:“mongodb”,“age”:6,“date”:new Date()}); } #批量插入10000个数据

#查询集合中的记录数

db.log.find()
说明:默认每页显示20条记录,当显示不下的的情况下,可以用it迭代命令查询下一页数据
#设置每页显示数据的大小:每页显示50条记录
DBQuery.shellBatchSize=50;
#查看第1条记录
db.log.findOne()
#查询总的记录数
db.log.count()
#删除集合中所有记录
db.log.remove({})
#集合中数据的原始大小
db.log.dataSize()
#集合中索引数据的原始大小
db.log.totalIndexSize()
#集合中索引+数据压缩存储之后的大小
db.log.totalSize()
#集合中数据压缩存储的大小
db.log.storageSize()

mongoexport / mongoimport

本机备份恢复
备份
mongodump -h 127.0.0.1 -d test -o /opt/mongodb/backup
恢复
mongorestore-h 127.0.0.1:27017 -d test /opt/mongodb/backup/test

异机备份恢复
源库主机192.168.88.201
mongodump -h 127.0.0.1 -d jm -o /opt/mbackup
scp -r jm/ root@192.168.70.21:/opt/mongodb/backup
目标库主机192.168.70.21
目标库可以不用重建被恢复的数据库名
mongorestore -h 127.0.0.1:27017 -d jm /opt/mongodb/backup/jm

二、MongDB企业版TDE配置
Configure Encryption
Local Key Management

–配置文件里配置加密参数
vim /etc/mongod.conf
security:
enableEncryption: true
encryptionKeyFile: /opt/mongodb/key/mongodb-keyfile

创建密钥文件
openssl rand -base64 32 > /opt/mongodb/key/mongodb-keyfile
–修改密钥文件权限
chmod 600 /opt/mongodb/key/mongodb-keyfile

To use the key file, start mongod with the following options:

–enableEncryption,
–encryptionKeyFile ,

mongod --enableEncryption --encryptionKeyFile mongodb-keyfile

–关闭MongDB
mongod -f /etc/mongod.conf --shutdown

–启动MongDB
mongod -f /etc/mongod.conf

[initandlisten] Encryption key manager initialized with key file:

要检查是否已在数据库中成功启用加密,可以使用以下命令检查
db.serverCmdLineOpts().parsed.security

也开通通过strings来查看数据文件

配置加密前
image.png

加密后
image.png

注意:MongoDB 3.6.8-4.x无法加密现有数据库。您必须关闭实例,清除数据文件目录,配置实例以进行加密,然后启动实例。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论