Mongodb单实例

一、Mongodb介绍

MongoDB是一个基于分布式文件存储的NoSQL数据库由C++语言编写 ;

官网 :https://www.mongodb.com/

二、Mongodb安装

#下载工具包,一个服务端,一个客户端工具
wget -c https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.4.tgz
wget -c https://fastdl.mongodb.org/tools/db/mongodb-database-tools-rhel70-x86_64-100.3.0.tgz

#创建相关目录
mkdir -p /data/resource/mongodb/{logs,etc,bin,data}

#上传到服务器,解压到指定目录下
tar xf mongodb-linux-x86_64-rhel70-4.4.4.tgz
tar xf mongodb-database-tools-rhel70-x86_64-100.3.0.tgz
mv mongodb-database-tools-rhel70-x86_64-100.3.0/bin/* /data/resource/mongodb/bin/
mv mongodb-linux-x86_64-rhel70-4.4.4/bin/* /data/resource/mongodb/bin/

#配置环境变量
echo "export PATH=/data/resource/mongodb/bin:\$PATH" >> /etc/profile
source /etc/profile;mongo --version

三、Mongodb配置

#生成加密证书文件
mkdir /data/resource/mongodb/etc/ssl;cd /data/resource/mongodb/etc/ssl/
openssl req -newkey rsa:2048 -new -x509 \
-days 365 -nodes -out mongodb-cert.crt -keyout mongodb-cert.key
cat mongodb-cert.key mongodb-cert.crt > mongodb.pem
#添加配置文件
vim /data/resource/mongodb/etc/mongodb.conf
#
dbpath=/data/resource/mongodb/data
logpath=/data/resource/mongodb/logs/mongodb.log
port=20000             #不建议使用默认端口号,默认使用27017
fork=true              #后台运行
logappend=true         #使用追加的方式写日志
maxConns=100           #最大同时连接数
auth=false             #暂不启用验证,初始化用户需要
bind_ip=10.0.0.10      #监听地址,不建议0.0.0.0,不安全
sslMode = requireSSL     #只接受SSL加密传输,防止连接信息被监听窃取
sslPEMKeyFile=/data/resource/mongodb/etc/ssl/mongodb.pem
noscripting=true         #禁用服务器端执行JavaScript脚本,防止执行恶意脚本消耗系统资源
journal=true             #每次写入会记录一条操作日志(通过journal可以重新构造出写入的数据)
storageEngine=wiredTiger #重放后续的journal日志来恢复使用
#启动服务
mongod --config /data/resource/mongodb/etc/mongodb.conf

#如果需要关闭服务,执行如下命令
mongod --config /data/resource/mongodb/etc/mongodb.conf --shutdown

三、Mongodb用户

3.1 权限说明

 对于Mongodb 而言,在创建管理员和用户时,分配的roles是决定用户操作数据库权限的关键,mongodb的用户信息是保存在system.users表中。

# 1)数据库用户角色(Database User Roles)
read: 授权User只读数据的权限,允许用户读取指定的数据库
readWrite: 授权User读/写数据的权限,允许用户读/写指定的数据库

# 2)数据库管理角色
dbAdmin: 在当前的数据库中执行管理操作,如索引的创建、删除、统计、查看等
dbOwner: 在当前的数据库中执行任意操作,增、删、改、查等
userAdmin: 在当前的数据库中管理User,创建、删除和管理用户

# 3)备份和还原角色
backup: 备份数据
restore: 还原数据

# 4)跨库角色
readAnyDatabase: 授权在所有的数据库上读取数据的权限,只在admin 中可用
readWriteAnyDatabase: 授权在所有的数据库上读写数据的权限,只在admin 中可用
userAdminAnyDatabase: 授权在所有的数据库上管理User的权限,只在admin中可用
dbAdminAnyDatabase: 授权管理所有数据库的权限,只在admin 中可用

# 5)集群管理角色
clusterAdmin: 授权管理集群的最高权限,只在admin中可用
clusterManager: 授权管理和监控集群的权限
clusterMonoitor: 授权监控集群的权限,对监控工具具有readonly的权限
hostManager: 管理server

# 6)超级角色
root: 超级账户和权限,只在admin中可用
3.2 用户创建
#使用SSL连接服务,客户端使用远程工具连接时需要把证书拿到客户端
mongo --host 10.0.0.10 --port 20000 \
--ssl --sslPEMKeyFile "/data/resource/mongodb/etc/ssl/mongodb.pem" \
--sslAllowInvalidCertificates --sslAllowInvalidHostnames

#创建管理员账号
use admin
db.createUser({"user":"root","pwd":"123","roles":["root"]})

#创建用户zhangsan,属于shool数据库
use school
db.createUser({"user":"zhangsan","pwd":"123","roles":[{"role":"dbOwner","db":"school"}]})

#修改用户密码
db.changeUserPassword('zhangsan','new_pass')
db.auth("root","abc123")  # 模拟认证,返回0则失败

#删除用户,需要在创建那个用户的库下进行删除,如果不指定用户会把该库下的所有用户全部删除
use admin
db.dropUser('shengjie')

#查看用户,查看已有用户
show users
db.system.users.find().pretty()
3.3 启用认证
#停止当前服务
mongod --config /data/resource/mongodb/etc/mongodb.conf --shutdown

#修改配置文件参数,启用认证
vim /data/resource/mongodb/etc/mongodb.conf
auth = true

#启动服务
mongod --config /data/resource/mongodb/etc/mongodb.conf
3.4 连接认证
#方式一
mongo --host 10.0.0.10 --port 20000 \
-u zhangsan -p 123 --authenticationDatabase school \
--ssl --sslPEMKeyFile "/data/resource/mongodb/etc/ssl/mongodb.pem" \
--sslAllowInvalidCertificates --sslAllowInvalidHostnames

#方式二
mongo --host 10.0.0.10 --port 20000 \
--ssl --sslPEMKeyFile "/data/resource/mongodb/etc/ssl/mongodb.pem" \
--sslAllowInvalidCertificates --sslAllowInvalidHostnames
use school
db.auth('zhangsan','123')