安装
环境:ubuntu 安装方式: .tgz包
下载包
tar -zxvf mongodb-linux-*-4.2.3.tgz
复制bin文件
有两个关键工具包, mongo 客户端 mongod 服务端
sudo cp <mongodb-install-directory>/bin/* /usr/local/bin/
指定路径
--dbpath 存储数据库数据 --logpath 存储log文件
启动数据库服务
如果不想用root来启动,可以把chown需要读写的文件的拥有者改成当前用户
sudo mongod --dbpath /home/ubuntu/data/db/ --logpath /home/ubuntu/data/log/mongo.log &
配置
配置文件配置方式 "k=v" 方式
# mongodb.conf
# Where to store the data.
#dbpath=/var/lib/mongodb
dbpath=/home/ubuntu/data/db
#where to log
logpath=/home/ubuntu/data/log/mongodb.log
logappend=true
bind_ip = 127.0.0.1
#port = 27017
# Enable journaling, http://www.mongodb.org/display/DOCS/Journaling
journal=true
# Enables periodic logging of CPU utilization and I/O wait
#cpu = true
# Turn on/off security. Off is currently the default
#noauth = true
#auth = true // 开启权限检查
通过配置文件启动mongod
mongod -f /etc/mongodb.conf
权限控制
mongo默认情况是没有权限控制,用户可以操作所有数据库,但是同时默认只允许本地连接数据库
显然这样满足不了我们正常的需求,所以下面通过配置与创建用户来实现数据库权限管理
连接数据库
mongo
切换admin数据库
use admin
创建超级用户,拥有所有权限
db.createUser(
{
user:"root",
pwd:"pwd",
roles:["root"]
}
)
创建业务数据库管理员
对example数据库有读写权限,对其他数据库只有读权限
db.createUser({
user:"example_admin",
pwd:"123456",
customData:{
name:'jim',
email:'jim@qq.com',
age:18,
},
roles:[
{role:"readWrite",db:"example"},
'read'// 对其他数据库有只读权限,对example读写权限
]
})
数据库角色权限列表
- 数据库用户角色:read、readWrite;
- 数据库管理角色:dbAdmin、dbOwner、userAdmin;
- 集群管理角色:clusterAdmin、clusterManager、4. clusterMonitor、hostManage;
- 备份恢复角色:backup、restore;
- 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超级用户角色:root
- 内部角色:__system
- Read:允许用户读取指定数据库
- readWrite:允许用户读写指定数据库
- dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
- userAdmin:允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户
- clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
- readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
- readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
- userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
- dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
- root:只在admin数据库中可用。超级账号,超级权限
权限配置开关
bind_ip = 0.0.0.0 # 允许所有外部ip访问
auth = true # 开启权限检验
权限使用
如果数据库操作前不授权,将无法对数据库操作
use admin
db.auth("root","1234")
use example
db.example.find()
远程连接
mongo <ip>:<port>
其他
推荐客户端工具 Robot3T 如果使用了权限管理,需要填写如下信息, auth Mechanism 是加密方式, 默认为SCRAM
